快捷搜索:

Android 信息共享专题之内容接收

如上节课《》所讲,您的利用可以给其他的APP发送内容,同样地,您的利用也可以接管和处置惩罚其他APP发送的内容。设计之初,您就应该斟酌,若何让您的APP与用户交互,以及您的APP主要处置惩罚哪些类型的数据。例如,一个收集社交类的APP可能对纯文本款式的数据感兴趣,像网页的URL地址。则同时对纯文本款式的数据和单张或多张图片类型的数据感兴趣,由于这样可以方便用户在 Gallery APP 浏览图片的时刻发送一条附带图片的 Google+ 信息流(Post)。

更新 Manifest 文件

Intent filters 主要用来奉告系统您的APP关心什么类型的系统消息。如前面章节《》构造发送内容的Intent时必要设置Action为,那么接管内容同样要奉告系统您的APP对Action为ACTION_SEND的系统消息感兴趣。您必要在tag中定义关注的intent filter,比如,您的APP可以用来处置惩罚纯文本款式的数据,通用类型的单张图片,或者混杂类型的图片列表,那么您的manifest 可能是这样的:

注:想懂得更多的有关Intent和Intent Filter的资讯请参照 《 》。

要是其他的APP发送了与上面manifest文件中声明的intent filter匹配的数据(经由过程声明Intent,设置Action值,添补数据,调用措施),那么您的APP就会呈现在 intent chooser(选择器)中,当用户选择了您的利用法度榜样,对应的activity (如上文声明的 .ui.MyActivity)就会被启动,详细怎么样处置惩罚接管到的数据就取决于您的设计了。

处置惩罚接管到的数据

要想获得其他APP发送过来的数据,您首先必要调用措施 来得到包孕数据的工具,一旦您获得了该工具,就可以读取里面的值来抉择下一步的动作。有一点您必要留意,假如您的Activity的启动进口不止这一处,比如用户可以经由过程主界面launcher启动,那么您就应理小心应对此类问题,主要差别是两者 包孕的内容不合。

示例代码

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 imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);

if (imageUris != null) {

// Update UI to reflect multiple images being shared

}

}

留意 :对付从其他APP发送过来的数据,您必要分外小心地反省和处置惩罚,由于您弗成能提前预知它们会发送什么样的数据。例如,它们有可能设置了差错的MIME 类型,或者通报一张异常大年夜的图片,还有一点必要留意,处置惩罚二进制数据的时刻最好新启一个自力的线程来处置惩罚,而不要放在主线程(main (“UI”) thread)中,防止界面壅闭。

更新UI界面可以很简单,比如将接管到的纯文本款式的数据显示到界面的控件中,也可以很繁杂,比如对接管到的图片数据做图像的变换处置惩罚,然后再显示。详细进行如何的处置惩罚各不相同,这要看您APP的设计了。

参考文摘:

原文:http://blog.zhourunsheng.com/2012/01/android-%e4%bf%a1%e6%81%af%e5%85%b1%e4%ba%ab%e4%b8%93%e9%a2%98%e4%b9%8b%e5%86%85%e5%ae%b9%e6%8e%a5%e6%94%b6/ | 润物无声

您可能还会对下面的文章感兴趣: