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
更长时间。
我一直在开发一个简单的音板应用程序,但遇到了一个奇怪的问题。 该应用程序在首次安装时运行良好,此后的任何时间,只有在安装它的设备重新启动后才会开始出现问题。
设备重启后,该应用似乎丢失了其中一个
具体来说:
<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
更长时间。