Intent 使用总结

Intent 一般可被用于启动活动、启动服务及发送广播等场景,还可用于组件间传递数据。

Activity类提供一个startActivity()方法,专门用于启动活动,接收一个Intent参数。Activity调用startActivity()方法,调用请求实际是发送给了操作系统的ActivityManager,ActivityManager负责创建Activity实例

一、显式Intent的使用

intent在同一个app的两个activity之间进行切换,通常是定义一个显式(explicit)的intent,明确指定了需要启动组件的类名。

Intent exlipcitIntent = new Intent(IntentActivity.this, ExplictActivity.class);
startActivity(exlipcitIntent);
二、隐式Intent的使用

当想要唤起不同的app来执行某个动作,则必须使用隐式(implicit)的intent,不明确指出所要启动的活动,而是指定一系列抽象的action和category等信息,然后交由系统去分析这个Intent,找出合适的活动去启动。
action标签中指明当前活动可响应的动作,category标签更精确指明
当前活动能够响应的Intent中可能带有的category。当action和category中的内容能够匹配Intent中指定的action和category时,这个活动才能响应该Intent。
在AndroidManifest.xml文件中为所想要启动的活动配action、category 等,然后再java代码中启动即可。例如,FirstActivity 中某个组件启动SecondActivity.

 <activity android:name=".ActionActivity">
            <intent-filter>
                <action android:name="com.developer.ghhf.intentdemo.START"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.MY_CATEGORY"/>
            </intent-filter>
 </activity>

启动时将action的内容传递给Intent,category标签的值可调用intent中的addCategory()方法,更精确的指出要启动的Activity.

Intent intent=new Intent("developer.happy.scripo.ACTION_START");
startActivity(intent);
每个Intent只能指定一个action,但却能指定多个category
三、更多隐式Intent的用法

查看网页
Intent intent=new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.baidu.com/")); startActivity(intent);

电话
Intent intent=new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent);

Intent常用动作:

 Intent.ACTION_ANSWER 打开接听电话的Activity,默认Android内置拨号界面
 Intent.ACTION_CALL  打开拨号盘界面并拨打电话,使用Uri中的数字部分作为电话号码
 Intent.ACTION_DELETE 打开一个Activity,对所提供的数据进行删除操作
 Intent.ACTION_DIAL 打开内置拨号界面,显示Uri中提供的电话号码
 Intent.ACTION_EDIT 打开一个Activity,对所提供的的数据进行编辑操作
 Intent.ACTION_INSERT 打开一个Activity,对所提供数据的当前位置插入新项
 Intent.ACTION_PICK 打开一个子Activity,从所提供的数据列表中选取一项
 Intent.ACTION_SEARCH 启动一个Activity,执行搜索动作
 Intent.ACTION_SENDTO  启动一个Activity,向数据提供的联系人发送信息
 Intent.ACTION_SEND    启动一个可以发送数据的Activity
 Intent.ACTION_VIEW    最常用的动作,对Uri方式传送的数据,根据Uri协议部分以最佳方式启动相应的Activity进行处理,对于http:address将打开浏览器查看,对于tel:address将进行拨号界面并呼叫指定的电话号码。
Intent.ACTION_WEB_SEARCH   打开一个Activity,对提供的数据进行WEB搜索。
四、向下一个活动传递数据

为组件添加事件,向下一个活动传递数据。通过putExtra()方法传递数据给下一个活动,

String data=mEditText.getText().toString();
Intent intent=new Intent(IntentActivity.this,SubActivity2.class);
intent.putExtra("extra_string",data);
startActivity(intent);

在SubActivity2中取数据,通过getIntent()方法获取传递过来的Intent,通过getStringExtra()获取到数据,除了传递String类型的,还可传递其他数据类型的数据,boolean类型的,用getBooleanExtra()接受等等。

dataText= (TextView)findViewById(R.id.get_data_from_intent);
Intent intent=getIntent();
String str=intent.getStringExtra("extra_string").toString();
dataText.setText(str);
五、返回数据给上一个活动

向上一个活动返回数据需要用startActivityForResult()启动Activity ,然后接受一个返回的result。被启动的activity需要指定返回的result,把这个result作为另外一个intent对象返回,我们的activity需要在onActivityResult()的回调方法里面去接收result。

在执行startActivityForResult()时,可以使用explicit 或者 implicit 的intent。当启动另外一个位于的程序中的activity时,我们应该使用explicit intent来确保可以接收到期待的结果。

Intent intent=new Intent(IntentActivity.this,SubActivity.class);            startActivityForResult(intent,SUBACTIVITY1);

用startActivityForResult()方法来启动SubActivity,在SubActivity中用setResult()方法把数据返回给上一个Activity。
setResult()方法,专门用于向上一个活动返回数据的,该方法接收两个参数,第一个参数用于向上一个活动返回数据,RESULT_OK 和RESULE_CANCELED 第二个参数,把带有数据的Intent传递回去。

Intent intent=new Intent();
intent.putExtra("data_return","Hello IntentActivity,I am SubActivity");
setResult(RESULE_OK,intent);
finish();

当用户完成了启动之后activity操作之后,系统会调用我们activity中的onActivityResult() 回调方法。该方法有三个参数:
1、通过startActivityForResult()传递的request code。
2、第二个activity指定的result code。如果操作成功则是RESULT_OK ,如果用
3、户没有操作成功,而是直接点击回退或者其他什么原因,那么则是RESULT_CANCELED
包含了所返回result数据的intent。

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode){
            case SUBACTIVITY1:
                if (resultCode==RESULT_OK){
                    Uri uriData=data.getData();
                    mTextView.setText(uriData.toString());
                }
                break;
        }
    }

参考内容:

一、Android官方培训课程

二、郭霖《第一行代码》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值