转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/40540613
原文:http://developer.android.com/training/basics/intents/filters.html
前面两个章节主要介绍了如何在你的应用中启动别的应用的activity。但是,如果你的应用会做一些对别的应用有用的事情,那你的应用最好准备好能响应来自别的应用的请求。比如,如果你构建了一个能够让用户给朋友分享消息或者图片的社交app,那么你最好是支持ACTION_SEND,这样用户就可以在别的应用中发起一个分享,然后启动起来你的应用,然后做分享。
<activity android:name="ShareActivity"> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> <data android:mimeType="image/*"/> </intent-filter> </activity>
<activity android:name="ShareActivity"> <!-- filter for sending text; accepts SENDTO action with sms URI schemes --> <intent-filter> <action android:name="android.intent.action.SENDTO"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="sms" /> <data android:scheme="smsto" /> </intent-filter> <!-- filter for sending text or images; accepts SEND action and text or image data --> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="image/*"/> <data android:mimeType="text/plain"/> </intent-filter> </activity>
在你的activity启动的时候,调用getIntent()可以检索出启动你的activity的intent。你可以在activity声明周期的任意时刻来读取,但是一般都会在onCreate()或者onStart()这种比较靠前的回调中来读。就像这样:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get the intent that started this activity Intent intent = getIntent(); Uri data = intent.getData(); // Figure out what to do based on the intent type if (intent.getType().indexOf("image/") != -1) { // Handle intents with image data ... } else if (intent.getType().equals("text/plain")) { // Handle intents with text ... } }
// Create intent to deliver some kind of result data Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"); setResult(Activity.RESULT_OK, result); finish();你必须总是在结果中指定一个结果码。一般来说,要么是RESULT_OK要么是RESULT_CANCELED。你还可以用Intent提供额外所需要的数据。
setResult(RESULT_COLOR_RED); finish();在这种情况下,结果只能是数的过来的几个可能的值。所以,结果码可以是本地定义的比0大的整数。当在你自己的app中从一个activity给另一个activity返回结果的时候会非常有用。因为接受结果的activity可以引用定义了结果值的公共常量。