我实现了一个ContentProvider通过覆盖的openFile(...)方法。然后我通过使用ContentResolver.openFileDescriptor(...)方法对其进行了测试。如 javadoc 中所述,openFileDescriptor假设调用ContentProvider.openFile:
“...打开原始文件描述符以访问 URI 下的数据。这类似于openAssetFileDescriptor(Uri, String),但使用底层openFile(Uri, String) ContentProvider.openFile()方法...”
问题是该openFile()方法从未被调用过。相反,我观察到它openAssetFile()被调用了。我用 android 4.1.2r1 对其进行了测试。当我查看 android 类 ContentResolver (4.1.2) 的源代码时,我看到它openFileDescriptor()只会调用openAssetFileDescriptor(),我根本找不到任何ContentProvider.openFile()可以调用的执行路径。
有人知道我错在哪里吗?- 谢谢
这是我的测试方法调用:
context.getContentResolver().openFileDescriptor(bitmapUri, "r").getFileDescriptor();
我bitmapUri是这样的“内容://com.myprovider.authority/filename”