Intent可以分为两种:显式Intent和隐式。
1.显示Intent
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
2.使用隐式Intent
隐式Intent并不指明要启动那个活动,而是指定了一系列更为抽象的action,category等信息,然后交由系统去分析这个Intent,并帮我们找到可以响应这个隐式Intent的活动去启动。
在AndroidManifest.xml中添加
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.ACTION_START" />
<category android:name="android.intent.category.DEFULT" />
</intent-filter>
</activity>
Intent intent = new Intent(android.intent.action.ACTION_START);
startActivity(intent);
表示我们要启动能够响应android.intent.action.ACTION_START这个action的活动,因为android.intent.category.DEFULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。
那么如何添加categoty呢?
只需intent.addCategory(android.intent.category.MY_CATEGORY);就行了。
当然Intent的隐式调用不禁能打开同一个App里的活动,还能打开另一个App里的活动,同样只需要<action/>与new Intent();里的action相同即可,不过一般不建议这样做。
3.Intent的其他用法
-展示一个网页
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
当然,要显示出网页,要在AndroidManifest.xml中添加访问网络的权限
<user-permission android:name="android.permission.INTERNET"/>
-调用系统拨号界面
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
3.向下个活动传递数据
- 直接传递
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("data",content);
startActivity(intent);
接受数据
Intent intent = getIntent();
string content = intent.getStringExtar("data");
- 使用Bundle进行传递
Bundle bundle = new Bundle();
bundle.put("key", value);
intent.putExtra(bundle);
intent.putExtra("key1",bundle);
接收数据
Intent intent = getIntent();
Bundle bundle = intent.getExtra();
bundle.getObject("key");
bundle.getObject("key1",value);//当key1不存在是,value为默认值
4.返回数据给上一个活动
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, requestCode);
在SecondActivity.java页面放置要返回的数据
Intent intent = new Intent();
intent.putExtra("key", 1);
setResult("RESULT_OK", intent);
finish();
SecondActivity被销毁后会回掉上个活动的onActivityResult()方法。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if (resultCode = RESULT_OK){
}
break;
}
}