Android官方开发文档Training系列课程中文版:分享简单数据之从其它APP接收简单数据

简介: 原文地址:http://android.xsoftlab.net/training/sharing/receive.html正如你的程序可以发送数据给其它程序,那么你也可以轻松的接收数据。

原文地址:http://android.xsoftlab.net/training/sharing/receive.html

正如你的程序可以发送数据给其它程序,那么你也可以轻松的接收数据。想象一下用户如何与你的程序交互,以及你想从其它应用程序接收的数据类型。举个例子,一个社交网络的程序可能对文本内容更感兴趣,比如一个有意思的Web地址,Google+ APP允许接收文本、单张图片或者多张图片。通过这个APP,用户可以很轻松的从Android图库APP启动一个Google+的发送照片任务。

更新你的清单文件

意图过滤器告知系统可以接收什么样的意图。举个例子,如果应用程序可以接收并处理文本内容,和任何类型的一张图片,或者任何类型的多张图片,你的清单文件应该声明成这样:

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

Note:有关更多意图过滤器的信息以及意图的分辨,请阅读: Intents and Intent Filters

当另一个程序通过构造一个意图并且传递给startActivity()并尝试分享这几种类型的任意一种时,你的程序会在意图选择器中列出各种选项。如果用户选择了你的程序,那么相应的activity会被启动。然后由你的代码和UI来妥善的处理这些内容。

处理到来的内容

为了处理由Intent传递过来的内容,开始调用getIntent()方法获得Intent对象。一旦你获得了这个对象,你可以检查其中的内容然后在决定接下来怎么做。记住一点,如果这个activity可以由系统的其它部分启动,比如系统的桌面,然后你需要在执行检查的时候将这种情况考虑在内。

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
    }
}

Caution:检查到来的附加数据要格外当心,你永远不会知道其它应用程序会发来什么。举个例子,比如可能设置了错误的MIME类型,或者发送来的图像可能非常的大。还要记得要在单独的线程中处理二进制数据,而不是主线程。

更新UI可以像填充一个EditText一样简单,否则的话它会像对图片应用有趣图片过滤器一样复杂,这需要您的应用程序明确接下来将要做什么。

目录
相关文章
|
4月前
|
XML 物联网 API
Android Ble蓝牙App(五)数据操作
Android Ble蓝牙App(五)数据操作
|
3月前
|
存储 JavaScript 小程序
jQuery、vue、小程序、uni-app中的本地存储数据和接受数据
jQuery、vue、小程序、uni-app中的本地存储数据和接受数据
28 0
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP
基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP
103 0
|
2月前
|
存储 移动开发 JavaScript
uni-app页面数据传参方式
uni-app页面数据传参方式
55 4
|
2天前
|
安全 Android开发
Android 预置可卸载分区接收不到任何广播问题分析和解决
Android 预置可卸载分区接收不到任何广播问题分析和解决
14 0
|
1月前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1
|
1月前
|
缓存
uni-app 82聊天页实时接收信息功能实现
uni-app 82聊天页实时接收信息功能实现
15 2
|
1月前
uni-app 79聊天类封装(十四)-处理接收消息
uni-app 79聊天类封装(十四)-处理接收消息
15 2
|
5月前
|
移动开发 程序员 API
item_get_app详细解析H5数据
item_get_app详细解析H5数据
|
2月前
|
监控 安全 数据可视化
Java数字孪生智慧工地数据大屏APP源码
高支模监测:高支模立杆及倾斜角度,高支模立杆的荷载,架体的水平位移以及模板沉降情况,当检测数据超过预警值时,实时报警。
28 0