Android发送数据给其他APP

构造intent时,必须指定希望intent“触发”的操作。 Android定义了几个操作,包括ACTION_SEND,你可能猜到,表示intent是从一个Activity发送数据到另一个,甚至跨过程边界。要将数据发送到另一个Activity,所有您需要做的是指定数据及其类型,系统将识别兼容的接收Activity并将其显示给用户(如果有多个选项)或立即启动Activity(如果只有一个选项)。同样,您可以通过在清单(manifest)中指定其他应用程序,宣传您的Activity支持从其他应用程序接收的数据类型。

在具有intent的应用之间发送和接收数据最常用于内容的社交共享。 Intents允许用户使用他们喜欢的应用程序快速,轻松地共享信息。

注意:向ActionBar添加共享操作项的最佳方法是使用ShareActionProvider,它在API级别14中可用。

发送文本数据

ACTION_SEND操作最直接和最常见的用法是将文本内容从一个Activity发送到另一个Activity。例如,内置的浏览器应用程序可以作为文本与任何应用程序共享当前显示的页面的URL。这对于通过电子邮件或社交网络与朋友分享文章或网站很有用。这里是实现这种类型的共享的代码:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

如果安装的应用程序具有与ACTION_SEND和MIME类型text / plain匹配的过滤器,Android系统将运行它;如果多于一个应用匹配,则系统显示允许用户选择应用的消歧对话框(“选择器”)。

然而,如果你调用Intent.createChooser(),传递它的Intent对象,它返回一个版本的意图,将永远显示选择器。这有一些优点:

  • 即使用户以前为此意图选择了默认操作,选择器仍将显示。
  • 如果没有应用程序匹配,Android会显示系统消息。
  • 您可以为选择器对话框指定标题。

这里是更新的代码:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

1
生成的对话框。

或者,您可以为意图设置一些标准附加功能:EXTRA_EMAIL,EXTRA_CC,EXTRA_BCC,EXTRA_SUBJECT。如果接收应用程序不是设计为使用它们,它只是忽略它们。

注意:某些电子邮件应用程序(例如Gmail)需要一个String[]作为EXTRA_EMAIL和EXTRA_CC等附加功能,请使用putExtra(String,String[])将它们添加到您的意图中。

发送二进制数据

使用ACTION_SEND操作以及设置相应的MIME类型并将数据的URI放置在额外命名的EXTRA_STREAM中来共享二进制数据。这通常用于共享图像,但可用于共享任何类型的二进制内容:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

请注意以下事项:

  • 您可以使用MIME类型“* / *”,但这只会匹配能够处理通用数据流的Activity。

接收应用程序需要访问Uri所指向的数据的权限。推荐的方法是:

  • 将数据存储在您自己的ContentProvider中,确保其他应用程序具有访问您的提供程序的正确权限。提供访问的首选机制是使用临时的每URI权限,并且只授予对接收应用程序的访问权限。一个简单的方法来创建这样的ContentProvider是使用FileProvider辅助类。
  • 使用系统MediaStore。 MediaStore主要针对视频,音频和图像MIME类型,但是从Android 3.0(API级别11)开始,它还可以存储非媒体类型(有关详细信息,请参阅MediaStore.Files)。可以使用scanFile()将文件插入到MediaStore中,然后将适合共享的content://style Uri传递给提供的onScanCompleted()回调。请注意,一旦添加到系统MediaStore,设备上的任何应用都可以访问内容。

发送多个内容

要共享多个内容,请使用ACTION_SEND_MULTIPLE操作以及指向内容的URI列表。 MIME类型因您分享的内容组合而异。例如,如果您共享3个JPEG图像,类型仍是“image / jpeg”。对于图像类型的混合,应该是“image / ”来匹配处理任何类型的图像的活动。你应该只使用“ / *”,如果你分享了各种各样的类型。如前所述,由接收应用程序来解析和处理您的数据。这里有一个例子:

ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));

与之前一样,请确保提供的URI指向接收应用程序可以访问的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值