就像你的应用程序可以将数据发送给其他应用程序,也可以很容易接收来自应用程序的数据。考虑用户如何与应用程序交互,数据类型你想收到什么其他应用程序。例如,一个社交网络应用程序可能会接收文本内容感兴趣,就像一个有趣的web URL,从另一个应用程序。Google + Android应用程序接受文本和单个或多个图像。与这个应用程序,用户可以很容易地开始一个新的Google +发布Android的照片画廊应用。
更新你的清单
意图过滤器通知系统意图应用程序组件是什么愿意接受。类似于你如何构造一个意图的行动ACTION_SEND发送简单的数据到其他应用课,您创建的意图过滤器,以能够接受该行动的意图。你在清单定义一个意图过滤器,使用<意图过滤器>元素。例如,如果您的应用程序处理接收文本内容,任何类型的单个图像,或任何类型的多个图像,你的表现看起来像:
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.categor 1911 y.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>
注意:有关意图过滤器和意图解决的更多信息请阅读目的和意图过滤器
当另一个应用程序试图分享这些事情通过构造一个意图,通过startActivity(),您的应用程序将列出在意图选择器作为一个选项。如果用户选择您的应用程序,相应的活动(。ui。MyActivity在上面的示例中)将开始。然后由你来妥善处理的内容在你的代码和UI。
处理传入的内容
处理内容由一个意图,开始通过调用getIntent意图对象()。一旦你有了对象,您可以检查其内容,确定下一步要做什么。请记住,如果这个活动可以从系统的其他部分,如发射器,然后你需要考虑这个当检查意图。
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 } }
警告:照顾额外检查传入的数据,你永远不知道一些其他应用程序可能会寄给你。例如,错误的MIME类型可能被设置,或者图片发送可能会非常大。还有,记得在一个单独的线程来处理二进制数据,而不是主要(UI)线程。
更新UI可以作为填充EditText一样简单,也可以是更复杂的像一个有趣的照片过滤器应用到一个图像。这是特定于您的应用程序接下来会发生什么。