我一直在制作一个简单的音板应用程序,我遇到了一个奇怪的问题。 该应用程序首次安装时工作正常,在此之后的任何时间,只有在安装的设备重新启动后才开始出现问题。
设备重启后,应用程序似乎松开了其中一个
具体做法是:
<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$3.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)
我将min和target sdk设置为19,并且我一直在测试使用带有API 22的设备。
我一直在抨击所有试图解决这个问题的人,但是还没有运气好。
我已经尝试在清单中两次列出权限,更新应用版本代码和名称,完全卸载应用并重新安装,到目前为止没有任何工作。
非常感谢任何帮助。
答案 0 :(得分:1)
您从其他应用获得的Uri
可能是短暂的,就您可以访问其内容的时长而言。最好的比喻是网站上文件的URL - 如果该URL需要经过身份验证的会话,只要用户的会话仍然存在,URL就会起作用,之后URL将不再起作用,强制执行用户再次登录。
如果您在Android 4.4+上使用the Storage Access Framework APIs来获取此Uri
,则可以尝试获取可保留的Uri
权限,这些权限可能会允许您访问Uri
{1}}更长时间。