【不再维护,如有bug、需求,请自行clone源码修改】
В Android10 и выше из-за добавления ограничений на доступ к внешнему хранилищу, при настройке пути кэширования ImagePicker для снимков и обрезки фотографий нельзя использовать пути хранения вне области приложения, такие как:
//不可设置这样的缓存路径
Environment.getExternalStorageDirectory().getAbsolutePath()+"/mycache/"
В противном случае произойдет ошибка:
java.io.FileNotFoundException: /storage/emulated/0/mycache/IMG_1586834402947.jpg: open failed: ENOENT (No such file or directory)
Это приведет к тому, что в Activity onActivityResult() не удастся получить возвращаемые данные и вызовет сбой:
2020-04-14 11:20:09.844 13553-13553/com.lwkandroid.imagepicker E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lwkandroid.imagepicker, PID: 13553
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=111, result=-1, data=Intent { (has extras) }} to activity {com.lwkandroid.imagepicker/com.lwkandroid.imagepickerdemo.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.lwkandroid.imagepicker.data.ImageBean.toString()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:5097)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5138)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7811)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.lwkandroid.imagepicker.data.ImageBean.toString()' on a null object reference
at com.lwkandroid.imagepickerdemo.MainActivity.onActivityResult(MainActivity.java:91)
at android.app.Activity.dispatchActivityResult(Activity.java:8292)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5090)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5138)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7811)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
android:requestLegacyExternalStorage="true"
ImagePicker в версии 1.4.5 уже добавил android:requestLegacyExternalStorage="true"
в AndroidManifest, но это временное решение.
ImagePicker в 1.4.6 изменил исходный путь кэширования по умолчанию на context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath()
и рекомендует использовать путь в области действия при создании пользовательских путей кэширования.
Для получения дополнительной информации о проекте можно обратиться к следующим блогам:
http://blog.csdn.net/lwk520136/article/details/65647033
http://www.jianshu.com/p/46b5918976e1
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )