проблема с доступом к файлам в android 10: - android studio

Android 10 не позволяет мне получить доступ к моим файлам из внешнего хранилища. В Android 9 мое приложение работало нормально. Я обновил свой телефон с Android 9 до Android 10, и мое приложение перестало отвечать.

main_activity.java

File directory;
    File path;
    File[] listfile;
    //File listFiles;
    ArrayList<String> arrayList;

directory = Environment.getExternalStorageDirectory();

        path = new File(directory.getAbsolutePath()+ "/myfile/");

        arrayList = new ArrayList<String>();
        mycardview.setAdapter(new ImageAdapter(listimage.this, arrayList));

if (path.isDirectory()) {
            listfile =path.listFiles();
            for (int i = 0; i < listfile.length; i++) {
                arrayList.add(listfile[i].getAbsolutePath());
            }
            Collections.shuffle(arrayList);

ОШИБКА:

java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.example.rajiv / com.example.rajiv.listimage}: java.lang.NullPointerException: попытаться получить длину нулевого массива в android.app.ActivityThread.performLaunchActivity (ActivityThread .java: 3374) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3513) в android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:83) в android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.executeCallbacks (TransactionExecutor.executeCallbacks. java: 135) на android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2109) на android.os.Handler.dispatchMessage (Handler.java : 107) в android.os.Looper.loop (Looper.java:214) в android.app.ActivityThread.main (ActivityThread.java:7682) в java.lang.reflect.Method.invoke (собственный метод ) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:516) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950) Вызвано: java.lang.NullPointerException: Попытка получить длину нулевого массива в com.example.rajiv.listimage.onCreate (listimage.java:74) в android.app.Activity.performCreate (Activity.java:7815) в android.app.Activity.performCreate (Activity. java: 7804) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1318) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3349)

Я проверил в Интернете, что проблема не в коде. Google применил исправление безопасности в Android 10, поэтому код не работает. Я также использовал разрешение на манифест, а также разрешение на выполнение ..


person Rajiv    schedule 03.01.2020    source источник
comment
developer.android.com/reference/android/os/Environment проверьте эту ссылку   -  person Kishan Viramgama    schedule 03.01.2020
comment
getExternalStorageDirectory() устарело android 10 targetSdkVersion 29   -  person Kishan Viramgama    schedule 03.01.2020
comment
stackoverflow.com/ questions / 57116335 /   -  person CommonsWare    schedule 04.01.2020
comment
на самом деле работает getExternalStorageDirectory (). спасибо за ваш ответ, я не буду использовать эту функцию с этого момента.   -  person Rajiv    schedule 04.01.2020


Ответы (1)


Еще одна, обнаруженная Google изменениями.

См. https://developer.android.com/training/data-storage.

Вам необходимо использовать MediaStore или Storage Access Framework (SAF), подробности https://developer.android.com/training/data-storage/shared для файлов вне частных каталогов вашего приложения.

Хотя в качестве быстрого решения можно временно отказаться от https://developer.android.com/training/data-storage/compatibility, но это будет работать только до Android 11

person Andrew    schedule 03.01.2020