【Android Developers Training】 32. 向其它应

系统 1619 0

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接: http://developer.android.com/training/sharing/send.html


当你构造了一个intent,你需要制定你的intent将会“ 激活 ”的行为。Andriud定义了一些行为,就像你所料想的一样,这里面就有 ACTION_SEND 这个行为,它表明了这个intent是将一个数据从一个Activity发送至另一个Activity,甚至这一操作可能会跨进程执行。为了将数据发送中另一个activity,所有你需要做的就是指定这个数据以及它的类型,系统会寻找出于其要求相符合的所有activity,并将它们展现给用户(如果有多个选择);或者直接启动这个activity(只有一个符合的activity)。类似的,你可以将你的activity所能支持的来自其它应用的数据类型在你的清单文件中声明出来。

在应用之间通过intent发送和接收数据在社交分享内容一块最为常用。Intent允许同于使用他们最喜爱的应用快速和简单的分享信息。

Note:

使用 ShareActionProvider 将一个分享行为添加到一个 ActionBar 是最好的方法,这在API Level 14及以上的平台上可以使用。 ShareActionProvider 将会在课程: Adding an Easy Share Action 中做进一步讨论。

 

一). 发送文字内容

最直接和通用的使用 ACTION_SEND 行为的场景是将文本内容从一个activity发送至另一个activity。例如,内置的浏览器应用可以将当前页面的URL以文本形式分享给任何一个应用。这对于将一个文章或者网站通过Email或者社交网站分享给朋友是很有用的。下面就是实现这样的分享的代码:

      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);
      
    

如果有一个安装的应用,它的intent过滤器能够匹配 ACTION_SEND 和" text/plain "的MIME类型,Android就会执行这个应用;如果不止一个应用能够符合要求,系统会展示一个单选对话框(即一个应用选择器),来让用户选择一个应用。如果你为这个Intent调用 Intent.createChooser() ,Android将会 永远 显示这个选择对话框,这有一些优势:

  • 哪怕用户之前已经选择了一个默认应用,选择器仍然会显示出来。
  • 如果没有匹配的应用,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所示。

图1. 手持设备上选择器对话框的截图

另外,你可以为Intent设置一下附加选项(extras): EXTRA_EMAIL EXTRA_CC EXTRA_BCC EXTRA_SUBJECT 等。不过,如果接收intent的应用没有设计成会使用它们,那么什么事情都不会发生。你也可以使用自定义的附加选项,当然只有接收intent的应用笨笨狗狗理解它们才会有效果。一般而言,你会使用被接收intent应用自己定义的附加选项。

Note:

一些Email应用,比如 Gmail ,会期望一个 String[] 的附加选项,比如: EXTRA_EMAIL EXTRA_CC 。你可以使用 putExtra(String, String[]) 来将它们添加至你的intent。

 

二). 发送二进制内容

二进制数据的分享是将 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 指向的数据。推荐的操作方式是这样的:

 

三). 发送多组内容

要分享多组内容,使用 ACTION_SEND_MULTIPLE 行为,和一个指向内容的URI的List。MIME的类型根据你要分享的内容而变化。例如,如果你要分享三张JPEG图片,那么类型仍然是“ image/jpeg ”。如果是各种图片格式的混合,那么类型就应该是“ image/* ”,它会寻找能够处理任意 格式 图片的Activity。仅在你在分享很多种类型的内容时,才应该使用“ */* ”。如之前所述,解析和处理数据的行为就要看接收intent的应用了。下面是一个发送多组内容数据的例子:

      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.."));
    

如之前所述,确保提供的 URIs 所指向的数据是接收intent应用能够有权限访问的数据。

【Android Developers Training】 32. 向其它应用发送简单数据


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论