Android 应用在重启后失去使用权限

Android App losing use permissions after reboot

我一直在开发一个简单的音板应用程序,但遇到了一个奇怪的问题。 该应用程序在首次安装时运行良好,此后的任何时间,只有在安装它的设备重新启动后才会开始出现问题。

设备重启后,该应用似乎丢失了其中一个

具体来说:

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>

这是我看到的股权跟踪:

 FATAL EXCEPTION: main
 Process: com.wochstudios.soundboard, PID: 10105
 java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{9f2b05a 10105:com.wochstudios.soundboard/u0a155} (pid=10105, uid=10155) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
    at android.os.Parcel.readException(Parcel.java:1546)
    at android.os.Parcel.readException(Parcel.java:1499)
    at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3361)
    at android.app.ActivityThread.acquireProvider(ActivityThread.java:4709)
    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2611)
    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1440)
    at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1063)
    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:921)
    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:848)
    at com.wochstudios.soundboard.Utils.SoundPlayer.getFileDescriptorFromUri(SoundPlayer.java:55)
    at com.wochstudios.soundboard.Utils.SoundPlayer.playSound(SoundPlayer.java:25)
    at com.wochstudios.soundboard.Controllers.SoundboardController.playSound(SoundboardController.java:26)
    at com.wochstudios.soundboard.DisplayFragments.SoundboardFragment$ListViewClickListener.onItemClick(SoundboardFragment.java:160)
    at android.widget.AdapterView.performItemClick(AdapterView.java:305)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1146)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
    at android.widget.AbsListView.run(AbsListView.java:3860)
    at android.os.Handler.handleCallback(Handler.java:746)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5343)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702)

我将最小和目标 sdk 设置为 19,并且我一直在使用 API 22.

的设备进行测试

我一直在努力解决这个问题,但还没有成功。

我已经尝试在清单中列出两次权限、更新应用程序版本代码和名称、完全卸载应用程序并重新安装,到目前为止没有任何效果。

如有任何帮助,我们将不胜感激。

从其他应用程序获得的 Uri 就您可以访问其内容的时间而言可能是短暂的。最好的类比是网站上文件的 URL——如果 URL 需要经过身份验证的会话,只要用户的会话仍然存在,URL 就会工作,之后URL 将不再有效,迫使用户重新登录。

如果您在 Android 4.4+ 上使用 the Storage Access Framework APIs 来获得此 Uri,您可以尝试获取持久的 Uri 权限,该权限可能会提供并且可能允许您访问 Uri 更长时间。