smi*_*324 5 android android-intent android-contentprovider
我试图通过ContentProvider公开位于我的应用程序的/ data目录中的.png文件,但是没有调用到达该openFile方法query.现在我只有一个我需要公开的图像以便与其他应用程序共享,我如何设置我的Intent openFile而不是query?
Intent shareImageIntent = new Intent(Intent.ACTION_SEND);
shareImageIntent.setType("image/*");
shareImageIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
startActivity(Intent.createChooser(shareImageIntent, "Share image"));
Run Code Online (Sandbox Code Playgroud)
Uri的样子
content://my.package.contentprovider/fileName
Run Code Online (Sandbox Code Playgroud)
或者我是否需要为此创建数据库并返回游标?
UPDATE
所以这似乎是在除了SMS应用程序之外的所有内容(这是我决定首先测试的)我想支持共享.
这是相关的堆栈跟踪:
引起:java.lang.IllegalArgumentException:对内容的查询:// mypackage.myprovider/someImage.png返回null结果.at com.android.mms.ui.UriImage.initFromContentUri(UriImage.java:104)at com.android.mms.ui.UriImage.(UriImage.java:63)at com.android.mms.model.ImageModel.initModelFromUri( ImageModel.java:83)位于com.android.mms的com.android.mms.data.WorkingMessage.changeMedia(WorkingMessage.java:481)的com.android.mms.model.ImageModel.(ImageModel.java:65). data.WorkingMessage.setAttachment(WorkingMessage.java:375)...
所以短信应用正在执行查询而不是直接阅读openFile,我的手机上的其他应用似乎都是这样(包括其他Google应用)
有谁知道我需要返回这里以适当地填充查询?我现在要去AOSP挖掘了.
在深入研究短信(实际上是彩信)应用程序的源代码后,这就是我想到的。
在应用程序内部UriImage.initFromContentUri编写查询代码并假设有 2 个返回列Cursor
} else {
filePath = c.getString(c.getColumnIndexOrThrow(Images.Media.DATA));
mContentType = c.getString(c.getColumnIndexOrThrow(Images.Media.MIME_TYPE));
}
Run Code Online (Sandbox Code Playgroud)
因此,为了使您ContentProvider能够使用彩信应用程序,您需要返回一个只有Cursor一行 query和两列(Images.Media.DATA 和 Images.Media.MIME_TYPE)以及适当数据的文件。然后 MMS 将调用 来openFile实际检索图像。
| 归档时间: |
|
| 查看次数: |
4118 次 |
| 最近记录: |