Добрый день всем, я хотел бы задать несколько вопросов, если можно. У меня есть приложение, которое работает на телефонах до Android 10, но я вижу, что при доступе к внешним каталогам были сделаны различные изменения кода. У меня нет доступа к телефону Android 10, поэтому я просмотрел следующий код после прочтения многих страниц в Stackoverflow. Я не знаю, как проверить это сам, поэтому, пожалуйста, сообщите мне, что они думают об этом коде:
String imageFileName;
String timestamp; // creation of the value omitted here
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
{
imageFileName = getApplicationContext().getExternalFilesDir(null).getAbsolutePath() + "/" + timeStamp + ".jpg";
}
else
{
imageFileName = Environment.getExternalStorageDirectory()+ "/" + timeStamp + ".jpg";
}
OutputStream fout = null; // Now write out the image to external directory
File imageFile = new File(imageFileName);
try {
fout = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 95, fout);
fout.flush();
fout.close();
} catch (Exception e) {
// do stuff
}
// Now, "update" the directory using MediaScannerConnection.scanFile to refresh
// its contents when viewed on the device
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
{
MediaScannerConnection.scanFile(activityReference.get(), new String[]{getApplicationContext().getExternalFilesDir(null).getAbsolutePath().toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri)
{
}
});
}
else // Not Android 10
{
MediaScannerConnection.scanFile(activityReference.get(), new String[]{Environment.getExternalStorageDirectory().toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri)
{
}
});
}
Приведенные выше части явно не ссылаются на Android 10 отлично работают
Другие вопросы касаются разрешений на доступ к хранилищу файлов, которые я хотел бы прочитать / записать. Я объявил их в Манифесте, и в настоящее время мой код для пре-Android 10 равен
if( (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
|| (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED))
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_ALL);
}
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_ALL);
}
Я загружаю файл изображения и, опять-таки, до Android 10, у меня есть
findbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 7);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch(requestCode){
case 7:
if(resultCode==RESULT_OK){
Uri PathHolder = data.getData();
try
{
img = BitmapFactory.decodeStream(getContentResolver().openInputStream(PathHolder));
}
catch(Exception e)
{
//
}
// Do more image related stuff here
}
break;
}
}
Есть ли здесь что-нибудь, что должно иметь оператор if..then для учета доступа к файлу в Android 10? Заранее благодарим за любую помощь.