如果文件附件通过ACTION_SEND失败,则仅共享文本

时间:2014-09-10 13:14:26

标签: android android-intent share

使用Share Intent共享文本和文件时遇到问题 当我选择要共享的Gmail时,它会同时包含文本和文件,但众所周知,我们无法通过Whatsapp共享文件。所以我想要的是如果文件附件失败那么只有文本应该共享,但它没有发生 我使用下面的代码:

        Intent intent = new Intent();
        intent.setAction(android.content.Intent.ACTION_SEND_MULTIPLE);
        intent.setType("*/*");
        intent.putExtra(
                android.content.Intent.EXTRA_TEXT,
                "Test Messge");
        intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
        startActivity(intent);

请建议一些。

3 个答案:

答案 0 :(得分:2)

这是不可能的。您无法知道用户将选择哪个应用。

我建议用户选择分享为“电子邮件”或“文字”,并根据该选择创建您的意图。

答案 1 :(得分:2)

就像其他人提到的那样,你不能让Whatsapp按你想要的方式行事。如果Whatsapp没有处理文本和Uri并且选择忽略它,我们就无能为力了。

但是,根据您希望它能够优雅地工作的程度,您可以:

方法1:

  1. 使用以下命令获取与您的意图相符的软件包列表:
  2. PackageManager packageManager = context.getPackageManager();
    List<ResolveInfo>     resolvedInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    

    下面,

    resolvedInfoList[i].activityInfo.packageName 
    

    为您提供包名称。

    1. 使用这些应用列表显示您自己的用户界面。当用户选择应用程序时,您将知道用户选择了哪个应用程序。

    2. 现在,如果选择的应用程序属于您知道无法使用文本处理文件Uri的应用程序列表(在您的情况下为WhatsApp),请仅使用EXTRA_TEXT创建一个intent。

    3. 调用具有所选包的明确意图的startActivity。

    4. 根据您的需要,您可以省略EXTRA_TEXT或EXTRA_STREAM以查找不能同时处理这两者的应用。

      提醒:这意味着您需要维护自己的用户界面。如果使用隐式intent调用startActivity,用户体验将与您看到的选择器不同。大多数制造商和平台都会定制选择器活动。因此,如果您需要符合本机体验,则不应采用此方法。

      方法2:

      使用ApkTool将Whatsapp代码反向工程为smali代码,以了解更多如何在EXTRA_TEXT和Intent.EXTRA_STREAM中处理您的意图。您只需打开活动smali文件并按照onCreate()代码即可。如果您可以在您身边做任何事情,我们希望能够提供一些想法。

      免责声明:反向工程应用和代码是合法的灰色区域。据我所知,不要直接使用代码获取商业收益。为了个人理解,这很好。

答案 2 :(得分:1)

我认为你想要的是你发送的数据将基于应用程序。像whatsapp一样,不接收文件并仅接收文本。但正如@DenleyBihari所说,这是不可能的。

从逻辑上思考。应用收到的数据基于他们为接收ACTION_SEND而创建的活动。你不能选择他们必须接受的东西。并且可以有任意数量的应用程序,因此您无法分辨哪个应用程序接收哪些内容。