Intent intent = new Intent(1.this,2.class);
startActivity(intent);
构建一个Intent,传入1.this作为上下文,传入2.class作为目标活动,意图就非常明显。极为显式Intent。
启动程序内活动
在清单文件,指定某个活动能够响应的action和category:
<intent-filter ><action android:name="com.example.activitytest.ACTION1"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.example.activitytest.My"/>
</intent-filter>
只有action和category的内容同时能够匹配上Intent中指定的action和category,才能响应Intent。
Intent intent = new Intent(“com.example.activitytest.ACTION1”);
intent.addCategory(“com.example.activitytest.My”);
startActivity(intent);
注意每个Intent中只能指定一个action但可以指定多个Category。
2. 启动其他程序的活动
比如程序需要展示一个网页:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(“http://www.baidu.com“));
startActivity(intent);
Intent.ACTION_VIEW是一个Android系统内置的动作。
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10000"));
Intent.ACTION_DIAL也是是一个Android系统内置的动作。调用系统拨号界面。
putExtra(key,value)方法可以把想要传递的数据存在intent中,启动另一个活动后,通过getIntent()方法取得Intent,然后调用getStringExtra()方法,传入相应的key,就可以得到传递的数据。
1. getStringExtra()
2. getIntExtra()
3. getBooleanExtra()
比如activity1有一个字符串,要传递到activity2中:
String data ="Hello secondActivity";
Intent intent = new Intent("com.example.activitytest.ACTION1");
intent.addCategory("com.example.activitytest.My");
**intent.putExtra("Data", data);**
startActivity(intent);
activity2.class里:
Intent intent = getIntent();
String data=intent.getStringExtra("Data");
Log.d("Activity2", data);
activity1中:
startActivityForResult(intent, 1);//1为请求码
也是用于启动活动,在活动销毁时能够返回一个结果给上一个活动。
activity2中:
Intent intent = new Intent();
intent.putExtra("datareturn", "hello 1Activity!!");
setResult(RESULT_OK, intent);
finish();//销毁当前活动
构建一个Intent用于传递数据。不启动活动。
setResult(RESULT_OK, intent)用于想上一个活动返回数据。
返回activity1中:
activity2销毁后会回调activity1的onActivityResult(int requestCode, int resultCode, Intent data)方法。所以重写之:
protected void onActivityResult(int requestCode, int resultCode, Intent data){
switch(requestCode){
case 1:
if(resultCode==RESULT_OK){
String data1=data.getStringExtra("datareturn");
Log.d("1Activity", data1);
}
break;
default:
}
}
通过检查requestCode的值判断数据来源,再通过resultCode判断处理结果是否成功。最后从data取值。