Android官方培训课程-笔记(分享简单数据)

1.

如果为intent调用了Intent.createChooser(),那么Android总是会显示可供选择。这样有一些好处:

  • 即使用户之前为这个intent设置了默认的action,选择界面还是会被显示。
  • 如果没有匹配的程序,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));

 

2.

分享二进制内容(Send Binary Content)

分享二进制的数据需要结合设置特定的MIME类型,需要在EXTRA_STREAM`里面放置数据的URI,下面有个分享图片的例子,该例子也可以修改用于分享任何类型的二进制数据:

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类型,但是这仅仅会match到那些能够处理一般数据类型的Activity(即一般的Activity无法详尽所有的MIME类型)
  • 接收的程序需要有访问URI资源的权限。下面有一些方法来处理这个问题:
  • 将数据存储在ContentProvider中,确保其他程序有访问provider的权限。较好的提供访问权限的方法是使用 per-URI permissions,其对接收程序而言是只是暂时拥有该许可权限。类似于这样创建ContentProvider的一种简单的方法是使用FileProvider helper类。
  • 使用MediaStore系统。MediaStore系统主要用于音视频及图片的MIME类型。但在Android3.0之后,其也可以用于存储非多媒体类型。

 

3.

发送多块内容(Send Multiple Pieces of Content)

为了同时分享多种不同类型的内容,需要使用ACTION_SEND_MULTIPLE与指定到那些数据的URIs列表。MIME类型会根据分享的混合内容而不同。例如,如果分享3张JPEG的图片,那么MIME类型仍然是image/jpeg。如果是不同图片格式的话,应该是用image/*来匹配那些可以接收任何图片类型的activity。如果需要分享多种不同类型的数据,可以使用*/*来表示MIME。像前面描述的那样,这取决于那些接收的程序解析并处理我们的数据。下面是一个例子:

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

4.

更新菜单声明(Update Menu Declarations)

使用ShareActionProvider的第一步,在menu resources对应item中定义android:actionProviderClass属性。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_item_share"
        android:showAsAction="ifRoom"
        android:title="Share"
        android:actionProviderClass="android.widget.ShareActionProvider" />
    ...
</menu>

这表明了该item的appearance与function需要与ShareActionProvider匹配。此外,你还需要告诉provider想分享的内容。

Set the Share Intent(设置分享的intent)

为了实现ShareActionProvider的功能,我们必须为它提供一个intent。该share intent应该像第一课讲的那样,带有ACTION_SEND和附加数据(例如EXTRA_TEXT与 EXTRA_STREAM)的。使用ShareActionProvider的例子如下:

private ShareActionProvider mShareActionProvider;
...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate menu resource file.
    getMenuInflater().inflate(R.menu.share_menu, menu);

    // Locate MenuItem with ShareActionProvider
    MenuItem item = menu.findItem(R.id.menu_item_share);

    // Fetch and store ShareActionProvider
    mShareActionProvider = (ShareActionProvider) item.getActionProvider();

    // Return true to display menu
    return true;
}

// Call to update the share intent
private void setShareIntent(Intent shareIntent) {
    if (mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(shareIntent);
    }
}

也许在创建菜单的时候仅仅需要设置一次share intent就满足需求了,或者说我们可能想先设置share intent,然后根据UI的变化来对intent进行更新。例如,当在Gallery里面全图查看照片的时候,share intent会在切换图片时候进行改变。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2014/12/9 星期二 开学典礼 2014/12/10 星期三 html 2014/12/11 星期四 css/JAVAScript基础 2014/12/12 星期五 2014/12/13 星期六 javaScript基础&DOM 2014/12/14 星期日 javaScript基础&DOM 2014/12/15 星期一 2014/12/16 星期二 DOM/xml基础 2014/12/17 星期三 xml&dom_sax&dom4j编程 2014/12/18 星期四 2014/12/19 星期五 tomcat与web程序结构与Http协议 2014/12/20 星期六 java web之servlet 2014/12/21 星期日 java web之request/respone 2014/12/22 星期一 2014/12/23 星期二 Cookie/session 2014/12/24 星期三 jsp/EL表达式/EL函数 2014/12/25 星期四 2014/12/26 星期五 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例 2014/12/27 星期六 编码实战演练(指导老师:) 2014/12/28 星期日 mysql数据库 2014/12/29 星期一 2014/12/30 星期二 jdbc 2014/12/31 星期三 jdbc 2015/1/1 星期四 元旦放假 2015/1/2 星期五 jdbc/DBUtil使用/jdbc案例 2015/1/3 星期六 jdbc分页/监听器 2015/1/4 星期日 2015/1/5 星期一 2015/1/6 星期二 javaWeb之过滤器 2015/1/7 星期三 javaWeb之文件上传和下载 2015/1/8 星期四 2015/1/9 星期五 框架学习之java基础加强 2015/1/10 星期六 巩固知识之项目实战(指导老师:) 2015/1/11 星期日 2015/1/12 星期一 巩固知识之项目实战(指导老师:) 2015/1/13 星期二 巩固知识之项目实战(指导老师:) 2015/1/14 星期三 巩固知识之项目实战(指导老师:) 2015/1/15 星期四 2015/1/16 星期五 Android应用开发-快速入门 2015/1/17 星期六 Android应用开发-数据存储和界面展现 2015/1/18 星期日 Android应用开发-数据存储和界面展现 2015/1/19 星期一 2015/1/20 星期二 Android应用开发-网络编程 2015/1/21 星期三 Android应用开发-网络编程 2015/1/22 星期四 2015/1/23 星期五 Android应用开发-页面跳转和数据传递 2015/1/24 星期六 Android应用开发-广播和服务 2015/1/25 星期日 2015/1/26 星期一 Android应用开发-广播和服务 2015/1/27 星期二 Android应用开发-多媒体编程 2015/1/28 星期三 2015/1/29 星期四 Android应用开发-内容提供者 2015/1/30 星期五 Android应用开发-新特性和知识点回顾 2015/1/31 星期六 2015/2/1 星期日 Android项目开发基础—C语言 2015/2/2 星期一 Android项目开发基础—JNI与底层调用 2015/2/3 星期二 Android项目开发基础—JNI与底层调用 2015/2/4 星期三 2015/2/5 星期四 Android应用开发-代码版本管理和实战 2015/2/6 星期五 android案例与项目—手机安全卫士 2015/2/7 星期六 android案例与项目—手机安全卫士 2015/2/8 星期日 2015/2/9 星期一 android案例与项目—手机安全卫士 2015/2/10 星期二 android案例与项目—手机安全卫士 2015/2/11 星期三 android案例与项目—手机安全卫士练习 2015/2/12-26 星期四 春节放假 2015/2/27 星期五 android案例与项目—手机安全卫士 2015/2/28 星期六 android案例与项目—手机安全卫士 2015/3/1 星期日 2015/3/2 星期一 android案例与项目—手机安全卫士练习 2015/3/3 星期二 android案例与项目—手机安全卫士 2015/3/4 星期三 android案例与项目—手机安全卫士练习 2015/3/5 星期四 2015/3/6 星期五 android案例与项目—手机安全卫士 201

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值