关于在Java中的一种方法中使用两种权限?

问题描述

我正在将手机用作android studio中的模拟器。我遇到错误 /0/personalist.xml ”没有这样的文件或目录,我多次检查了我的代码,并且在和认为错误与许可有关。如果我将手机用作存储设备,是否应该申请 WRITE_EXTERNAL_STORAGE 许可?

在这里

package com.mehMetaltindal.artbook;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteStatement;
import android.graphics.Bitmap;
import android.graphics.imagedecoder;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ArtsActivity extends AppCompatActivity {
    EditText editTextArtName;
    EditText editTextYear;
    EditText editTextPainter;
    Bitmap selectedImage;
    ImageView imageViewArt;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_arts);
        imageViewArt = findViewById(R.id.imageViewArt);
        editTextArtName = findViewById(R.id.editTextArtName);
        editTextPainter = findViewById(R.id.editTextPainterName);
        editTextYear = findViewById(R.id.editTextYear);
        button = findViewById(R.id.button);
    }

    public void selectimage(View view) {

        if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
        } else {
            Intent intentTogallery = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intentTogallery,2);


        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {

        if (requestCode==1){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Intent intentTogallery = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(intentTogallery,2);
            }
        }
        super.onRequestPermissionsResult(requestCode,permissions,grantResults);
    }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {

        if (requestCode == 2 && resultCode == RESULT_OK && data != null)
        {
           Uri imageData = data.getData();

            try {
                if (Build.VERSION.SDK_INT >= 28){

                    imagedecoder.source  source = imagedecoder.createSource(this.getContentResolver(),imageData);   //Content resolver kullanarak Uri'ı alıp bitmapa çevirmek için kullanılır.
                    selectedImage = imagedecoder.decodeBitmap(source);
                }else {
                    selectedImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageData);
                    imageViewArt.setimageBitmap(selectedImage);
                }

            } catch (IOException e) {
                e.printstacktrace();
            }
        }

        super.onActivityResult(requestCode,resultCode,data);
    }

    public void save (View view){
        String artsName = editTextArtName.getText().toString();
        String painterName = editTextPainter.getText().toString();
        String year = editTextYear.getText().toString();

        Bitmap smallImage = makeSmaller(selectedImage,300);

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        smallImage.compress(Bitmap.CompressFormat.PNG,50,outputStream);
        byte[] byteArray =  outputStream.toByteArray();


        try {

            sqliteDatabase myDatabase = this.openorCreateDatabase("Arts",MODE_PRIVATE,null);
            myDatabase.execsql("CREATE TABLE IF NOT EXISTS arts (id VARCHAR,artname VARCHAR,paintername VARCHAR,year VARCHAR,image BLOB)");


            String sqlString ="INSERT INTO arts (artname,painter,year,image) VALUES (?,?,?)";
            sqliteStatement sqliteStatement = myDatabase.compileStatement(sqlString);
            sqliteStatement.bindString(1,artsName);
            sqliteStatement.bindString(2,painterName);
            sqliteStatement.bindString(3,year);
            sqliteStatement.bindBlob(4,byteArray);
            sqliteStatement.execute();


        } catch (Exception e){


        }
        finish();

        }

        public Bitmap makeSmaller (Bitmap image,int maxSize){

            int width = image.getWidth();
            int height = image.getHeight();

            float bitMapRatio = (float) width / (float)height;

            if (bitMapRatio > 1){
                width = maxSize;
                height = (int) (width / bitMapRatio);

            }else{
                height = maxSize;
                width = (int) (height * bitMapRatio);
            }
            return  Bitmap.createScaledBitmap(image,width,height,true);  //bitmapi tekrar yeni ölçülerle yeni bir bitmap'e çevirmek için metod

        }

}


我想知道我是否可以在 selectimage 代码块中应用足够的权限?

解决方法

尝试以下代码:

 @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    public void readStoragePermission() {
        int checkpermissions = ContextCompat.checkSelfPermission(SplaceScreenActivity.this,Manifest.permission.READ_EXTERNAL_STORAGE);
        String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE};
        boolean status = isGranted(checkpermissions);
        if (status) {
            wirteStoragePermission();
        } else {
            ActivityCompat.requestPermissions(SplaceScreenActivity.this,permissions,001);
        }
    }

    public void wirteStoragePermission() {
        int checkpermissions = ContextCompat.checkSelfPermission(SplaceScreenActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE);
        String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        boolean status = isGranted(checkpermissions);
        if (status) {
            audioStoragePermission();
        } else {
            ActivityCompat.requestPermissions(SplaceScreenActivity.this,002);
        }
    }

    public void audioStoragePermission() {
        int checkpermissions = ContextCompat.checkSelfPermission(SplaceScreenActivity.this,Manifest.permission.RECORD_AUDIO);
        String[] permissions = {Manifest.permission.RECORD_AUDIO};
        boolean status = isGranted(checkpermissions);
        if (status) {
            phoneStoragePermission();
        } else {
            ActivityCompat.requestPermissions(SplaceScreenActivity.this,003);
        }
    }

    public void phoneStoragePermission() {
        int checkpermissions = ContextCompat.checkSelfPermission(SplaceScreenActivity.this,Manifest.permission.READ_PHONE_STATE);
        String[] permissions = {Manifest.permission.READ_PHONE_STATE};
        boolean status = isGranted(checkpermissions);
        if (status) {
            next();
        } else {
            ActivityCompat.requestPermissions(SplaceScreenActivity.this,004);
        }
    }

    private boolean isGranted(int permission) {
        if (permission == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

    public void next() {
        handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                    Intent intent = new Intent(SplaceScreenActivity.this,MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
            }
        },2000);
    }


    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {

        if (requestCode == 001) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                wirteStoragePermission();
            } else {
                Toast.makeText(this,"Without STORAGE PERMISSION EMS not open",Toast.LENGTH_LONG).show();
                readStoragePermission();
            }
        }
        if (requestCode == 002) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                audioStoragePermission();
            } else {
                Toast.makeText(this,Toast.LENGTH_LONG).show();
                wirteStoragePermission();
            }
        }
        if (requestCode == 003) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                phoneStoragePermission();
            } else {
                Toast.makeText(this,"Without AUDIO PERMISSION EMS not open",Toast.LENGTH_LONG).show();
                audioStoragePermission();
            }
        }
        if (requestCode == 004) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                next();
            } else {
                Toast.makeText(this,"Without READ PHONE STATE PERMISSION EMS not open",Toast.LENGTH_LONG).show();
                phoneStoragePermission();
            }
        }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...