Android 10 код для разрешения доступа к внешнему каталогу и предоставления разрешений - PullRequest
0 голосов
/ 15 января 2020

Добрый день всем, я хотел бы задать несколько вопросов, если можно. У меня есть приложение, которое работает на телефонах до 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? Заранее благодарим за любую помощь.

...