为了让其他App可以启动我们的Activity,我们必须添加一个 <intent-filter> 元素在我们的配置清单中对应的
<activity>
里面。
当我们的App安装到一个设备中,系统就会识别我们的Intent filter 并且将信息添加到所有安装的App支持的Intent的内部目录中。当一个app调用startActivity()或者是startActivityForResult()的时候,系统就会找到对应的可以响应的Activity。
添加一个Intent Filter
为了适当定义那种Intent是我们Activity可以处理的,每个我们添加的Intent过滤器应该在action和data的接受式条款尽可能具体一些。
Action:
一个字符串命名的要完成的动作。通常是一个平台定义的值比如:ACTION_SEND
或者 ACTION_VIEW
.
Data:
Catogory:
例子:
<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>
为了接收隐式的Intent,我们必须包含一个
CATEGORY_DEFAULT 的category,如果没有声明的话,我们的Activity就不会解决任何的隐式的Intent。
在Activity中处理Intent
例子:
@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();
只是返回一个Integer的结果,就这样吧:
setResult(RESULT_COLOR_RED);
finish();