#java #android #sdk #android-manifest
#java #Android #sdk #android-манифест
Вопрос:
Я использую свой телефон в качестве эмулятора в 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 amp;amp; 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 amp;amp; resultCode == RESULT_OK amp;amp; 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, этого достаточно или нет?
Комментарии:
1. Да, используйте разрешение WRITE_EXTERNAL_STORAGE
2. Спасибо, Ахмед, я нашел источник ошибки
Ответ №1:
попробуйте этот код:
@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 amp;amp; 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 amp;amp; 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 amp;amp; 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 amp;amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
next();
} else {
Toast.makeText(this, "Without READ PHONE STATE PERMISSION EMS not open", Toast.LENGTH_LONG).show();
phoneStoragePermission();
}
}
}
Комментарии:
1. Спасибо за внимание, я нашел решение, но я уверен, что этот код будет полезен в будущем
2. @MehmetAltindal Не принимает никакого ответа, если вы не использовали его в своем коде и не помогли вам.
3. @MehmetAltindal Просто опубликуйте свой правильный ответ и то, что вы сделали для решения своей проблемы, а затем примите его