关于在java中在一个方法中使用两个权限



我正在安卓工作室中使用我的手机作为模拟器。我有一个错误">/0/persalist.xml";没有这样的文件或目录,我在中多次检查了我的代码,我认为错误在于权限。如果我将手机用作存储设备,是否应申请WRITE_EEXTERNAL_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, permissions, 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, permissions, 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, permissions, 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, "Without STORAGE PERMISSION EMS not open", 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();
}
}
}

最新更新