我愿意创建一个应用程序,发送图片回复android.intent.action.GET_CONTENT
的意图。我的用例是来自Play商店的Messenger应用程序,我猜是最常见的短信/彩信应用程序。发送图像回应android.intent.action.GET_CONTENT
我试图发送图片,但效果不好。当将彩信发送到Android手机时,他们可以正常使用,但iPhone似乎将其显示为从不玩的虚拟视频。
我知道这可能是由我或外国运营商的MMSC服务器引起的,它认为它很聪明,并将数据转码为它所猜测的格式良好的数据。
但是,当将其他应用程序使用相同的意图(尝试Google的Photos应用程序和Solid Explorer)时,它适用于Android和iPhone。
我的猜测是照片和实体探索者以适当的格式发回数据,MMS应用程序正确地发送到MMSC,原样发送图片。
这里是我的尝试:
- 发送我的文件的简单
Uri
在缓存中(通过Content#getExternalCacheDir()
:不工作 - 发送使用
StreamProvider
我的文件的Uri
,使用CommonWare's CWAC lib,通过设置LocalPathStrategy
以Context#getExternalCacheDir()
作为根路径:不工作
两种策略都以图像发回给MMS应用程序正确显示,并且该按钮变为“发送彩信”;然后在Android上收到它作为图片,在iOS上这是一个不起作用的虚假视频。
我应该如何将数据发送回调用应用程序?
只是实际解释我做什么,这里是第一策略:
Intent result = new Intent();
result.setData(Uri.fromFile(localImage));
setResult(Activity.RESULT_OK, result);
finish();
这里是第二:
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();
我想我可以通过位图字节数据的意图,但我没有想出办法做到这一点。
测试MMS以外的内容,看看这些方法之间的差异。例如,将其作为电子邮件附件发送。或者,创建一个'ACTION_GET_CONTENT'客户端,测试各种场景,并比较你得到的结果。此外,您可能会考虑将MIME类型附加到响应“意图”,以防万一。 – CommonsWare
我会跟客户路线走,那真棒。我应该想到这一点!谢谢。 –
我的意图和Solid Explorer之间的唯一区别是我的标志设置为1('FLAG_GRANT_READ_URI_PERMISSION'),并且它们具有定义的MIME类型。我猜他们的提供者没有和你的旗帜一样的安全级别。我已经提供了MIME类型,但仍然失败。 Google照片的标志= 1,还有一个额外的剪辑数据,这是一个包含与内容相同的URI的项目的“text/uri-list”。所以,因为我的结果意图几乎与Solid Explorer和Google Photos相同,所以我猜测它在提供商方面。有没有设置的MIME类型? –