发送图片以响应android.intent.action.GET_CONTENT

时间:2016-09-22 22:11:22

标签: android android-intent mms commonsware-cwac

我愿意创建一个发送图片以回复android.intent.action.GET_CONTENT意图的应用。我的用例是来自Play商店的Messenger应用程序,我猜是最常见的SMS / MMS应用程序。

我试图发送图片,但效果不好。将彩信发送到Android手机时,他们可以正常使用,但iPhone似乎会将其显示为从不播放的虚假视频。
我知道这可能是由我或外国运营商MMSC服务器引起的,它认为它很聪明并且将数据转码为它所猜测的格式良好。

但是,当对另一个应用程序使用相同的意图(尝试使用Google的照片应用程序和Solid Explorer)时,它适用于Android和iPhone。

我的猜测是,照片和Solid Explorers以适当的格式发回数据,MMS应用程序正确地发送到MMSC,按原样提供图片。

这是我尝试的内容:

  1. 在缓存中发送简单Uri我的文件(通过Content#getExternalCacheDir():无法正常工作
  2. 使用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

    我认为我可以将位图字节作为意图中的数据传递,但我还没有想出办法来做到这一点。

1 个答案:

答案 0 :(得分:1)

是的,如果您使用setResult()作为结果,则Intent似乎还需要FLAG_GRANT_READ_URI_PERMISSION FLAG_GRANT_WRITE_URI_PERMISSION和/或ContentProvider Uri {1}}。

addFlags()可以将这些标记添加到Intent,至少返回到API级别19。我没有测试过早于此版本,因此可能存在必须使用{{ 1}}技巧:

ClipData