Android Developers -- Building Apps With Content Sharing(第一章)
来源:互联网 发布:高清网络硬盘播放器 编辑:程序博客网 时间:2024/05/21 09:07
第一章:构建内容共享的应用(Building Apps With Content Sharing)
参考官方文档:http://developer.android.com/training/sharing/send.html
章节目录:
第一节:共享简单数据(Sharing Simple Data) 有Intent 和 IntentFileter基础
1.向其他应用发送简单的数据(文本、二进制、多片段) Sending Simple Data to Other Apps(Text、Binary and Multiple Pieces of Content)
当构造了一个Intent,必须为其指定一个让这个Intent触发的Action。Android已经为Intent定义了一些Action,其中就包括ACTION_SEND(表示Intent可以将数据从一个activity发送到其他的activity,甚至还可以跨进程发送),而所要做的紧紧是指定data和该数据的type,系统则会根据这些描述兼容性地鉴定出可接受的activities并把它们呈现给用户,如果只有一个activity,则会立即启动activity(start activity),同样地,可以在manifest文件中通过IntentFilter指定自己应用程序的所有activity能处理的数据类型,如此公布来接收和处理来自其他应用程序的Intent请求。
注意:最佳实践方式是通过使用ShareActionProvider向ActionBar添加一个share action item(在API 14以上才可用).
1.1 发送文本内容 (Send Text Content)
最直接通用的方式是通过使用ACTION_SENDaction 从一个activity发送文本内容(Text Content)数据到其他activity.
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);如果一个应用的filter匹配ACTION_SEND和 MIME type text/plain,Android 系统则会运行它。如果有多个应用匹配到了,系统则会呈现一个选择对话框让用户选择一个应用。
但是,如果调用 Intent.createChooser(), 那么总是会显示一个选择器(chooser),这样使用有一些优点:
1)即使用户之前为这个Intent选择了一个默认的action,该选择器(chooser)依然会显示
2)如果没有匹配到应用,Android系统会显示一个系统消息(message)
3) 你可以为选择器对话框(chooser dialog)指定一个标题
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.2 发送二进制数据(Send Binary Content)
共享二进制数据是通过使用ACTION_SEND和设置适当的MIME type以及在一个名为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)));需注意以下几点:
1)你可以使用“*/* ”的MIME类型,但是这将只能匹配到那些能处理通用数据流(generic data streams)的activities。
2)接受的应用需要有访问指向数据URI的权限,推荐使用如下方式:
① 在你自己的ContentProvider中存储数据,并确保其他应用有正确的访问你的Provider的权限。这首选机制是使用per-URI permissions(这是临时地而且只为接受的应用授予访问权限)来提供访问权限。一个简单的方式是使用FileProvider 辅助类(helper classes) 来创建一个这样的ContentProvider。
② 使用系统媒体存储MediaStore. 这MediaStore 旨在存储video(视频)、audeo(音频)以及Image(图片) MIME 类型数据,Android 3.0(API 11) 开始可以存储非媒体类型数据
注意一旦插入到系统MediaStore中的内容(content)能被设备上任何应用所访问。
1.3 发送多块内容(Send Multiple Pieces of Content)
使用ACTION_SEND_MUILTIPLEaction以及一个指向内容的 URIs 列表。MIME 类型则根据混合的内容进行变化。比如要共享3张jpg 图片,MIME 类型依然是“image/jpg ”
,如果有多重混合的图片类型,则类型是“ image/* ” 以匹配一个能处理任意图片类型的activity。如果你要共享各种各样的类型,仅需使用 “*/*” 。按照之前的阐述,由接受的应用自行决定解析和处理你的数据。
ArrayList<Uri> imageUris = new ArrayList<Uri>();imageUris.add(imageUri1); // Add your image URIs hereimageUris.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 可以被接受的应用所访问。
As before, make sure the provided URIs point to data that a receiving application can access.
未完待续。。。
- Android Developers -- Building Apps With Content Sharing(第一章)
- Building Apps with Content Sharing
- Android doc译文|Building Apps with Content Sharing|Sharing Simple Data
- 跟Google 学代码 :Building Apps with Content Sharing(跟女神去表白)
- 第二章 Building App with Content Sharing
- 第2章 Building Apps with Contents Sharing
- Building Apps Faster with Android Data Binding
- Android TV-Building TV Apps,Get Started with TV Apps
- Building Apps with Multimedia
- Building Apps with Multimedia
- [EBOOK] Building Android Apps with HTML, CSS, and JavaScript
- Android Building Apps with Over 65K Methods (Multiple DEX)
- Android Auto-Building Apps for Auto,Getting Started with Auto
- android-Building Apps for Work,Ensuring Compatibility with Managed Profiles
- Building Huuuuuge Apps with AngularJS
- Building Apps with Graphics & Animation1
- Building Apps with Graphics & Animation2
- Building Apps with Location & Maps
- Hdu4704 Sum(又见费马小定理)
- 安全测试
- ecplise字体配色和界面主题设置
- Java23种设计模式全解析
- Hadoop-包的功能分析
- Android Developers -- Building Apps With Content Sharing(第一章)
- 如何让点聚WebOffice在线编辑ActiveX插件兼容火狐、谷歌、IE各式浏览器
- osworkflow与spring的集成
- 用于运行 ASP.NET 的进程帐户必须具有对 IIS 元数据库(如 IIS://servername/W3SVC)的读访问权
- poj1011
- 020:ID生成策略XML配置(连接mysql)
- opencv学习笔记之resize
- jxl做excel报表
- android开发:EditText中android:capitalize属性的作用