Intent的用法——第一行代码阅读笔记

  • 显式Intent启动活动
  • 隐式Intent启动活动
  • 向活动传递数据
  • 返回数据给上一个活动

显式Intent启动活动

Intent intent = new Intent(1.this,2.class);
 startActivity(intent);

构建一个Intent,传入1.this作为上下文,传入2.class作为目标活动,意图就非常明显。极为显式Intent。

隐式Intent启动活动

  1. 启动程序内活动
    在清单文件,指定某个活动能够响应的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取值。

你可能感兴趣的:(android,启动,action,intent,category)