使用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);
请建议一些。
答案 0 :(得分:2)
这是不可能的。您无法知道用户将选择哪个应用。
我建议用户选择分享为“电子邮件”或“文字”,并根据该选择创建您的意图。
答案 1 :(得分:2)
就像其他人提到的那样,你不能让Whatsapp按你想要的方式行事。如果Whatsapp没有处理文本和Uri并且选择忽略它,我们就无能为力了。
但是,根据您希望它能够优雅地工作的程度,您可以:
方法1:
PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> resolvedInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
下面,
resolvedInfoList[i].activityInfo.packageName
为您提供包名称。
使用这些应用列表显示您自己的用户界面。当用户选择应用程序时,您将知道用户选择了哪个应用程序。
现在,如果选择的应用程序属于您知道无法使用文本处理文件Uri的应用程序列表(在您的情况下为WhatsApp),请仅使用EXTRA_TEXT创建一个intent。
调用具有所选包的明确意图的startActivity。
根据您的需要,您可以省略EXTRA_TEXT或EXTRA_STREAM以查找不能同时处理这两者的应用。
提醒:这意味着您需要维护自己的用户界面。如果使用隐式intent调用startActivity,用户体验将与您看到的选择器不同。大多数制造商和平台都会定制选择器活动。因此,如果您需要符合本机体验,则不应采用此方法。
方法2:
使用ApkTool将Whatsapp代码反向工程为smali代码,以了解更多如何在EXTRA_TEXT和Intent.EXTRA_STREAM中处理您的意图。您只需打开活动smali文件并按照onCreate()代码即可。如果您可以在您身边做任何事情,我们希望能够提供一些想法。
免责声明:反向工程应用和代码是合法的灰色区域。据我所知,不要直接使用代码获取商业收益。为了个人理解,这很好。
答案 2 :(得分:1)
我认为你想要的是你发送的数据将基于应用程序。像whatsapp一样,不接收文件并仅接收文本。但正如@DenleyBihari所说,这是不可能的。
从逻辑上思考。应用收到的数据基于他们为接收ACTION_SEND而创建的活动。你不能选择他们必须接受的东西。并且可以有任意数量的应用程序,因此您无法分辨哪个应用程序接收哪些内容。