官网地址
http://developer.android.com/training/building-content-sharing.html
看看左边的目录,前面9篇文章完成了官网的Getting Started系列的内容。
(革命尚未成功,同志仍需努力)
现在继续往下看。
这篇文章学习,如何在两个apps和设备(devices)之间分享数据。
一、分享简单的数据
这个简单,上篇文章就写到通过Intent分享数据。
1.1 发送简单的数据给其它的apps
1.1.1 文本类型的数据
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);
如果有多个Activity可以处理ACTION_SEND和类型是text/plain的情况下,系统会弹出一个app的选择框。
我们可以通过Intent.createChosser()的方法来让系统总是显示选择框。
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) 即使用户之前选择了默认的Action来处理这个Intent,选择框仍然会出现。
2) 如果没有可以匹配的,可以给出系统消息。
3) 可以为你的选择框设置一个标题。
1.1.2 分享二进制内容的数据
比如说一张图片
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.1.3 分享多份数据
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.."));
例子很简单,我们用到的了一个数组来存放多份数据而已。
1.2 从其他apps接收简单数据
内容和上一节有很多重复的地方。简单成列下了。
1.2.1 修改你的Manifest
告诉你的Activity可以处理那些类型的Intent
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity>
1.2.2 处理过滤过来的Intent
void onCreate (Bundle savedInstanceState) { ... // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } else if (type.startsWith("image/")) { handleSendImage(intent); // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // Update UI to reflect text being shared } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Update UI to reflect image being shared } } void handleSendMultipleImages(Intent intent) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // Update UI to reflect multiple images being shared } }
代码完全的从官网拷贝过来的,从Intent得到动作(Action)和类型,然后根据不同的情况分别处理。
1.3 添加一个简单的分享动作(adding an easy share action)
可以在ActionBar上加上一个键分享的功能。当然也是基于Intent的,只是方式不一样而已。
1.3.1 更改Menu Declarations
比如修改如下menu的资源文件
<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>
重要的是最后项,actionProviderClass.
1.3.2 设置Share Intent
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); } }
//TODO 说实话这个还没有调通,打个标记先。
相关推荐
Take advantage of client-side data storage with apps that run even when the Android device is offline Use PhoneGap to hook into advanced Android features — including the accelerometer, geolocation, ...
Take advantage of client-side data storage with apps that run even when the Android device is offline Use PhoneGap to hook into advanced Android features -- including the accelerometer, geolocation,...
React Native – Building Mobile Apps with JavaScript 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Building Web Apps with Spring 5 and Angular 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Applying Native Device APIsBuild HTML5-based hybrid applications for Android with a mix of native Java and JavaScript components, without using third-party libraries and wrappers such as PhoneGap or ...
《Realm Building Modern Swift Apps with Realm Database》是一本专注于利用Realm数据库构建现代Swift应用程序的重要资源。这本书深入探讨了如何在iOS开发中有效地运用 Realm,为开发者提供了丰富的知识和实践指导...
《构建移动应用 with Ionic 2 final2.0》是一份深度探讨使用Ionic 2框架开发移动应用程序的资源,其中包含了完整的项目源码供学习者参考。Ionic 2是一款基于Angular的开源框架,专为构建高性能的混合移动应用而设计...
Completely up-to-date to reflect the newest and most widely used Android SDKs, The Android Developer’s Cookbook is the essential resource for developers building apps for any Android device, from ...
Learning React Native Building Native Mobile Apps with JavaScript(2nd) 英文azw3 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
《Building Web Apps with Go》是一本关于如何使用Go语言开发高效Web应用程序的指南。本书不仅覆盖了基础概念,还深入探讨了一些高级主题,旨在帮助读者从入门到精通。 #### 二、预备知识 在开始本书的学习之前,...
Title: WebSocket Essentials: Building Apps with HTML5 WebSockets Author: Varun Chopra Length: 111 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2015-04-30 ISBN-10: ...
Building Web Apps with Spring 5 and Angular 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Move beyond default UI templates, create and customize amazing UIs with Android Custom View Enable smooth data flow and create futuristic UIs by creating flexible custom views Scale your apps with ...