总述
Intent是一个重要的数据结构,它有两个重要的成员变更,一个是action另一个是data。
另外的一些成员变量如category,type,component,extras都不如前两个重要,不过component比较特别一些,Intent可以分成精确和模糊两种类型,划分的依据就是component。
- category是对action的补充,是对action更进一步的描述。
- type是对data的补充,显示的指出data的MIME类型,不用再根据数据推测它的MIME类型了。
- component是组件的名子,也就是intent发送的目的地,有了这个,其它的描述都可以省略>了,因为不需要根据其它的数据来推测intent需要发送的目的地。
- extras字面意思是其它,在这里的意思也是其它,上面所不包括的,都写在这里。
Intent的应用场景
应用场景一:多个Activity之间切换。Activity A需要切换到Activity B
Intent intent = new Intent();
intent.setAction("android.intent.action.TEST");
startActivity(intent);
应用场景二:父Activity启动一个子Activity,子Activity执行之后返回值给父Activity
public class MyActivity extends Activity {
...
static final int PICK_CONTACT_REQUEST = 0;
protected boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
// When the user center presses, let them pick a contact.
startActivityForResult(
new Intent(Intent.ACTION_PICK,
new Uri("content://contacts")),
PICK_CONTACT_REQUEST);
return true;
}
return false;
}
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// A contact was picked. Here we will just display it
// to the user.
startActivity(new Intent(Intent.ACTION_VIEW, data));
}
}
}
}
应用场景三:直接启动一个Activity
Intent intent = new Intent();
intent.setClass(MainActivity.this, TestResult.class);
startActivity(intent);
或者传递数据给子Activity
Intent intent = new Intent();
intent.setClass(MainActivity.this, TestResult.class);
intent.putExtras("name","real name");
startActivity(intent);
//接收Intent
Intent intent = getIntent();
String name = intent.getStringExtras("name");
应用场景四:传递数据
如果传递的数据结构复杂,或者可以会被多次传递,可以使用bundle
Intent intent = new Intent();
Bundle bl = new Bundle();
bl.putString("test", name);
intent.putExtras(bl);
Intent的主要作用还是activity间切换,对于传递数据,虽然可以使用这个方式,但并不最优的方法。