Android学习笔记——关于Intent

1. 关于显式Intent和隐式Intent

显式Intent即Intent实例化时已经确定好要打开哪个Activity,比如这样:

Intent intent = new Intent(MainActivity.this,TestActivity.class);
startActivity(intent);

隐式Intent则是正好相反,使用隐式Intent启动新的Activity时并不会直接指定要启动哪个Activity,而是会通过Action、 Category或Data等属性 ” 在系统上所有的应用中寻找符合条件的应用,这个匹配过程要求所有参数都完全匹配才算匹配成功

  • 如果符合条件的应用有多个时,系统会给出应用列表让用户选择启动哪个应用
  • 如果只有一个应用符合条件,系统就会直接启动这个应用
  • 如果没有一个应用符合条件,此时若是没有在相应位置设置try-catch块进行错误处理的话,应用会停止运行并报错

特殊的是,在使用隐式Intent启动Activity时,如果不指定category的话,在调用startActivity()这个方法时会自动将其设置为DEFAULT。所以如果一个Activity不需要特殊设置Category属性并可能会使用隐式Intent启动时,在AndroidMainfest.xml的配置项中Category应设置为DEFAULT。

2. 一些Intent的使用方式示例

以下使用的属性的参数还有很多
1. 使用Component Name打开新的Activity(显式Intent)

方法如下:

				//实例化一个ComponentName对象,使用new关键字,
                // 参数为要打开的Activity的包名称和Activity内部类的名称
                ComponentName componentName = new ComponentName("com.componentname","com.componentname.ComponentNameActivity");
                
                //实例化一个无参数Intent
                Intent intent = new Intent();
                
                //将设置好的ComponentName作为数据通过setComponent()方法放入intent中
                intent.setComponent(componentName);
                
                //启动Activity
                startActivity(intent);
2. 通过Action启动拨号和Data预设要拨的号码(隐形Intent)

方法如下:

					//设置Action为Call用于启动拨号
                    intent.setAction(Intent.ACTION_CALL);

                    //通过Data属性预先设置好要拨的号码为5555
                    intent.setData(Uri.parse("tel:5555"));
                    startActivity(intent);
3. 通过Action和Category设置在启动时第一个显示(隐形Intent)

方法如下:

				//设置action为ACTION_MAIN用于让该页面在开始时启动
                intent.setAction(Intent.ACTION_MAIN);

                //设置category为CATEGORY_HOME用于程序启动第一个显示
                intent.addCategory(Intent.CATEGORY_HOME);
                
                startActivity(intent);
4. 通过Flags让Activity退出之后无法返回

方法如下:

				Intent intent = new Intent(MainActivity.this,DetailActivity.class);
                
                //通过Flags设置FLAG_ACTIVITY_NO_HISTORY来让这个Activity被关闭之后就无法返回,
                // 即不保存在历史栈中
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(intent);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值