奇怪的服务权限行为

Strange service permission behaviour

我有一个 SendActivity,它启动了一个 UploadService。

问题发生在我让 SendActivity 然后立即启动另一个 activity 并自行完成时。 UploadService 从内容提供者那里获取应该上传的文件。但是,当 SendActivity 不是我在服务试图通过提供者访问文件的那一刻的前台时,我得到了 "Permission Denial" 尽管我的清单中列出了权限。

java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A24669 from pid=28913, uid=10441 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
                                                at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:646)

有人可以帮我吗?

我的猜测是您将 UriSendActivity 传递到 UploadServiceSendActivity 可能有权阅读该内容,但 UploadService 没有。

在用于启动 UploadServiceIntent 中,调用 addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 将读取权限从 SendActivity 转移到 UploadService,看看是否有帮助。如果没有,那么可能 SendActivity 没有读取权限,在这种情况下,您需要查看如何获得 Uri第一名.