我有一个Android DocumentsProvider,可以使用支持Androids Storage Access Framework的应用程序来阅读。 Word等应用程序以及Google自己的DocumentsUI。我无法将文件写入DocumentsProvider。写入存储的任何内容,无论是重命名,删除,创建文件还是写入文件,都将在请求甚至到达文档提供者之前失败。
我的AndroidManifest.xml
的提供者部分如下:
<provider android:name="com.mycompany.myproduct.myprovider"
android:authorities="com.mycompany.myproduct.documents"
android:grantUriPermissions="true"
android:exported="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER"/>
</intent-filter>
</provider>
我的提供者是具有以下permissions
的应用程序的一部分:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.INTERNET"/>
当我从存储提供商那里返回行时,我会包含FLAGS_SUPPORTS_WRITE, FLAGS_SUPPORTS_DELETE, FLAGS_SUPPORTS_RENAME
。
我想知道,与发起意图的应用程序一样,DocumentsProvider是否不是问题所在。但是,这些应用似乎可以写给其他提供商。所以,我想知道我是否缺少明显的东西(或微妙的,我不在乎哪个)。有什么想法吗?
答案 0 :(得分:0)
我在这个问题上工作了几天。曾经发誓可以奏效。它对读取有效但对写入无效的事实使我感到困扰。无论如何,在仔细审核了提供商之后,我发现一件事是不对的。
通话 在API级别19中添加 公共捆绑包调用(字符串方法, 字符串arg, 捆绑包) 实现由父类提供。可以覆盖提供 附加功能,但子类必须始终调用超类。如果>超类返回null,则子类可以实现自定义行为。
如果重写此方法,则必须调用超类 实施。
我最近在提供程序中添加了一个调用,因此我实现了此调用例程,但是...没有对super的调用。其他所有东西都起作用,因此除了写不起作用之外,它没有以其他任何特殊方式突出。必须有一些可能与权限相关的调用必须传递给基类。我阻止了它。因此,请考虑解决此问题。