如果文件附件失败,通过ACTION_SEND共享文本
我在使用共享意向共享文本和文件时遇到问题。
当我选择Gmail共享时,它同时使用文本和文件,但正如我们所知,我们无法通过Whatsapp共享文件。所以我想要的是如果文件附件失败,那么只有文本应该分享,但它没有发生。
我使用下面的代码:如果文件附件失败,通过ACTION_SEND共享文本
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:
- 通过使用你的意图相匹配的包获取列表:
PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> resolvedInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
这里,
resolvedInfoList[i].activityInfo.packageName
给你包的名称。
用这些应用程序的列表显示您自己的UI。当用户选择应用程序时,您将知道用户选择了哪个应用程序。
现在,如果选择的应用程序属于应用程序列表,您知道不能使用文本处理文件Uri(在您的情况下是WhatsApp),请仅使用EXTRA_TEXT创建一个意图。
调用startActivity并显式选择包。
根据您的需要,您可以省略EXTRA_TEXT或EXTRA_STREAM以处理不同时处理的应用程序。
警告:这意味着您需要维护自己的用户界面。用户体验会与您看到的选择器不同,如果startActivity是以隐式意图调用的。大多数制造商以及平台都会自定义选择器的活动。因此,如果您需要符合本地体验,则不应采用此方法。
方法2:
反向工程WhatsApp的代码插入到使用ApkTool smali代码,以了解更多它是如何处理你的意图时,都EXTRA_TEXT和Intent.EXTRA_STREAM在里面。您可以打开活动smali文件并按照onCreate()代码。如果你可以在你身边做任何事情,这将有希望给出一些想法。
免责声明:逆向工程应用程序和代码是合法的灰色地带。据我所知,不要直接使用代码来获得商业利益。为了个人理解,大多数都很好。
谢谢@Rohan ...问题解决了:) – Sonali8890 2014-10-10 13:39:53
@ Sonali8890太棒了。知道你究竟是如何解决这个问题将会很有趣。 – Rohan 2014-10-10 18:47:15
很好的答案!但我对第一种方法有疑问。如果在EXTRA_TEXT和EXTRA_STREAM共享应用程序的列表中已经显示whatsapp,那么使用你的解决方案,它不应该显示同一列表中的whatsapp? – berserk 2014-10-11 06:10:22
这是不可能的。你无法知道用户将选择哪个应用程序。
我建议让用户选择共享为“电子邮件”或“文本”,并根据该选项创建您的意图。
感谢您的快速回复,但我的要求不是这样。我正在研究一个共享应用程序,它与一些额外的文本共享文件,我不能给用户提供他想发送的选项,因为他认为他只发送文件。 – Sonali8890 2014-10-10 06:02:24
我想你想要的是你发送的数据将基于应用程序。就像whatsapp不接受文件并仅接收文本。但正如@丹利比哈里所说,这是不可能的。
只要逻辑思考。应用程序接收到的数据基于他们为接收ACTION_SEND而创建的活动。你不能选择他们必须接受的。并且可以有任何数量的应用程序,所以你不能分辨哪个应用程序接收哪些内容。
我同意你的看法,但是从开发者网站上我们可以为意图设置一些标准的附加内容,如果接收应用程序不是为了使用它们而设计的,它就会忽略它们。所以根据上面的行如果我把一个文件的意图然后whatsapp会忽略额外的但它应该除了Intent.EXTRA_TEXT文本。 – Sonali8890 2014-10-10 05:57:40
@ Sonali8890正是!完全正确!所以你想要什么? – berserk 2014-10-10 06:11:41
我想如果像whatsapp这样的应用程序不是除了文件,那么它应该忽略文件和文本只。 – Sonali8890 2014-10-10 06:15:41
请了解有关从其他应用程序接收简单数据,您将得到您的答案http://developer.android.com/training/sharing/receive.html – 2014-10-07 10:17:35