显示Intent
通过构造函数的重载,创建Intent对象,并用startActivity()启动目标活动。
目标活动需要在AndroidManifest.xml中注册
...... Intent intent = new Intent(FristActivity.this,SecondActivity.class); startActivity(intent); ......
隐式Intent
指定了一系列的action和category。
1.在AndroidManifest.xml中添加如下代码:
1 <activity android:name=".SecondActivity"> 2 <intent-filter> 3 <action android:name="com.example.activitytest.ACTION_START"/> 4 <category android:name="andorid.intent.category.DEFAULT"/> 5 <intent-filter> 6 </activity>
只有同时匹配action和category才能响应该intent。
2.在FirstActivity中的按钮点击事件里加入如下代码
...... public void onClick(View v){ Intent intent = new Intent("com.example.activitytest.ACTION.START"); startActivity(intent); } ......
每个Intent中只能指定一个action,可以指定多个category。
可以通过Addcategory()方法添加多个category。
使用Intent调用系统浏览器
...... public void onClick(View v){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("www.baidu.com")); //解析Uri startActivity(intent); } ......
可以在AndroidManifest.xml文件中<intent-filter>下<data>标签中指定响应数据的类型。例如:<data android:scheme="http">(android:host、port、path、mimeType)
除http协议外,还可以在Uri中指定其他协议;geo(地理位置)、tel(拨打电话)等。
Intent传递数据
使用putExtra()方法传递数据
1 ...... 2 public void onClick(View v) { 3 String data = "Hello World"; 4 Intent intent = new Intent(FirstAcitivity.this,SecondActivity.class); 5 intent.putExtra("extra_data",data); //将数据以键-值对暂存在intent 6 startActivity(intent); 7 } 8 ......
从intent中获取数据
1 public class SecondActivity extends appCompatActivity{ 2 @Override 3 protected void onCreate(Bundle savedInstanceState){ 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.second_layout); 6 Intent intent = getIntent(); //获取intent实例 7 String data = intent.getStringExtra("extra_data"); //从intent中获取数据 8 } 9 }
返回数据给上一个Activity
1.在FirstActivity中调用startActivityForRest()方法
...... public void onClick(View v){ Intent intent = new Intent(FirstActivity.this,SecondAcitvity.class); startActivityForResult(intent,1); //1为请求码,只要是唯一值即可。 } ......
2.在SecondActivity中注册点击事件
1 ...... 2 Button button = (Button)findViewById(R.id.button); 3 button.setOnClickListener(new View.onClickListener){ 4 public void onClick(View v){ 5 Intent intent = new Intent(); 6 intet.putExtra("data_return","Hello FirstActivity"); 7 setResult(RESULT_OK,intent); //向上一个活动返回数据,两个参数:RESULT_OK/RESULT_CANCELED(处理结果),intent(带有数据的intent) 8 finish(); //销毁当前活动 9 } 10 } 11 ......
3.SecondActivity销毁后,回调onActivityResult()方法。在FirstActivity中重写这个方法得到返回数据
protected void onActivityResult(int requestCode,int resultCode,Intent data){ switch(requestCode){ //判断数据来源 case 1: if(resultCode == RESULT_OK){ //判断处理结果 String retunedData = data.getStringExtra("data_return"); //取值 } break; default; } }
通过requestCode(请求码)判断数据来源,通过resultCode判断处理结果,再从data中取值。