gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:37:10 26 4
gpt4 key购买 nike

我在使用 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);

请推荐一些。

最佳答案

正如其他人所提到的,您无法让 Whatsapp 按照您想要的方式进行操作或行为。如果 Whatsapp 没有同时处理文本和 Uri 而选择忽略它,我们对此无能为力。

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

方法一:

  1. 使用以下方式获取符合您的 Intent 的软件包列表:
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 并带有针对所选包的明确 Intent 。

根据您的需要,对于不能处理这两者的应用,您可以省略 EXTRA_TEXT 或 EXTRA_STREAM。

请注意:这意味着您需要维护自己的 UI。如果以隐式 Intent 调用 startActivity,用户体验将与您看到的选择器不同。大多数制造商和平台都会自定义选择器 Activity 。所以如果你需要符合原生体验,这种方式不应该被采用。

方法 2:

使用 ApkTool 将 Whatsapp 代码逆向工程为 smali 代码了解更多当 EXTRA_TEXT 和 Intent.EXTRA_STREAM 都在其中时它是如何处理你的 Intent 的。您可以只打开 Activity smali 文件并遵循 onCreate() 代码。如果您可以在您身边做任何事情,这有望给您一些想法。

免责声明:逆向工程应用程序和代码在法律上属于灰色地带。据我了解,请勿将代码直接用于商业利益。个人理解,大部分都可以。

关于android - 如果文件附件通过 ACTION_SEND 失败,则仅共享文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25766431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com