我愿意创建一个发送图片以回复android.intent.action.GET_CONTENT
意图的应用。我的用例是来自Play商店的Messenger应用程序,我猜是最常见的SMS / MMS应用程序。
我试图发送图片,但效果不好。将彩信发送到Android手机时,他们可以正常使用,但iPhone似乎会将其显示为从不播放的虚假视频。
我知道这可能是由我或外国运营商MMSC服务器引起的,它认为它很聪明并且将数据转码为它所猜测的格式良好。
但是,当对另一个应用程序使用相同的意图(尝试使用Google的照片应用程序和Solid Explorer)时,它适用于Android和iPhone。
我的猜测是,照片和Solid Explorers以适当的格式发回数据,MMS应用程序正确地发送到MMSC,按原样提供图片。
这是我尝试的内容:
Uri
我的文件(通过Content#getExternalCacheDir()
:无法正常工作Uri
使用StreamProvider
发送LocalPathStrategy
我的文件,方法是设置Context#getExternalCacheDir()
Intent result = new Intent();
result.setData(Uri.fromFile(localImage));
setResult(Activity.RESULT_OK, result);
finish();
作为根路径:不工作< / LI>
醇>
两种策略最终都会将图像正确发送回MMS应用程序,然后显示该图像并且按钮变为“发送彩信”。然后在Android上收到了它作为图片,在iOS上它是一个不起作用的假视频。
我应该如何将数据发送回调用应用程序?
为了实际解释我的所作所为,这是第一个策略:
Intent result = new Intent();
result.setData(PROVIDER
.buildUpon()
.appendPath(StreamProvider.getUriPrefix(AUTHORITY))
.appendPath(localImage.getName())
.build());
result.setFlags(FLAG_GRANT_READ_URI_PERMISSION);
setResult(Activity.RESULT_OK, result);
finish();
这是第二个:
.finalize
我认为我可以将位图字节作为意图中的数据传递,但我还没有想出办法来做到这一点。
答案 0 :(得分:1)
是的,如果您使用setResult()
作为结果,则Intent
似乎还需要FLAG_GRANT_READ_URI_PERMISSION
FLAG_GRANT_WRITE_URI_PERMISSION
和/或ContentProvider
Uri
{1}}。
addFlags()
可以将这些标记添加到Intent
,至少返回到API级别19。我没有测试过早于此版本,因此可能存在必须使用{{ 1}}技巧:
ClipData