Intent使用方法

扫码查看

显示Intent

  通过构造函数的重载,创建Intent对象,并用startActivity()启动目标活动。

  目标活动需要在AndroidManifest.xml中注册

......
Intent intent = new Intent(FristActivity.this,SecondActivity.class);
startActivity(intent);
......

隐式Intent

  指定了一系列的action和category。

  1.在AndroidManifest.xml中添加如下代码:

 <activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START"/>
<category android:name="andorid.intent.category.DEFAULT"/>
<intent-filter>
</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()方法传递数据

  

 ......
public void onClick(View v) {
String data = "Hello World";
Intent intent = new Intent(FirstAcitivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);  //将数据以键-值对暂存在intent
startActivity(intent);
}
......

  从intent中获取数据

 public class SecondActivity extends appCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Intent intent = getIntent();  //获取intent实例
String data = intent.getStringExtra("extra_data");  //从intent中获取数据
}
}

  返回数据给上一个Activity

  1.在FirstActivity中调用startActivityForRest()方法

......
public void onClick(View v){
Intent intent = new Intent(FirstActivity.this,SecondAcitvity.class);
startActivityForResult(intent,1);  //1为请求码,只要是唯一值即可。
}
......

  2.在SecondActivity中注册点击事件

 ......
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.onClickListener){
public void onClick(View v){
Intent intent = new Intent();
intet.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);  //向上一个活动返回数据,两个参数:RESULT_OK/RESULT_CANCELED(处理结果),intent(带有数据的intent)
finish();  //销毁当前活动
}
}
......

  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中取值。

05-28 00:35
查看更多