Android学习系列-----1 Android显示Intent和隐式Intent在Activity中的应用

发布时间:2019-06-15 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android学习系列-----1 Android显示Intent和隐式Intent在Activity中的应用脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Intent的中文翻译是“意图”,是AndROId程序中各组件之间进行交互的一种重要方式。Intent一般可被用于ActivITy、Activity、Service、broadcastReceiver中的场景。今天,我们的目光暂时先放在Activity上。Intent大致可以分为:显示Intent和隐式Intent两种,并且既可以跳转(启动)到自己的程序内部活动中,还可以跳转(启动)到其他程序的活动。

显示Intent

在程序内部活动中跳转

显示Intent在程序内部跳转的代码其实很简单

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

就是这么简单的两句话,所表达出来的“意图”也非常明显,就是从FirstActivity跳转到SecondActivity,然后用startActivity(intent)来启动。当然代码也可以分开写,如下:

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

以上两种代码的效果一模一样。

隐式Intent

在程序内部活动中跳转

隐式Intent比显示稍微复杂一些,毕竟要比显示的更加“腼腆”,让人较难看透。言归正传,隐式Intent,它并不明确指出所要启动的活动,而是通过指定action和category等信息,让系统来分析这个Intent,并帮我们找到所对应的活动,所谓的找到对应活动就是通过将AndroidManifest下的action和category信息与Activity下的action和category信息配对(即两者一样的),所以我们需要在Activity下也写入action和category信息。不管别的,先上代码:

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.administrator.myapplication.A"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

上面的代码是AndroidManifest.xml下SecondActivity的<activity>标签,在里面配置了<intent-filter>内容,指定了当前活动能够响应的action和category信息,其中<action>标签中的字符串表示当前活动可以响应的内容,而<category>标签里的则是更为具体、详细的信息,使得指向更加精确。再看里面的命名:com.example.administrator.myapplication.A,这个name是可以任意的,没有规定,但是为了能够更加说明问题,采取了包名+具体内容,这样的形式,当然只要你愿意,你也可以写成“asdfghj”这样任意的字符串;<category>里的命名也是同理,但是:android.intent.category.DEFAULT,这个是默认的,只要他出现,你在Activity中只需写上action相对应的信息,而不用写category所对应的信息,因为系统默认给你写上了。下面再看Activity里的代码:

Intent intent = new Intent("com.example.administrator.myapplication.A");
startActivity(intent);

还是很简单的两句话,可以看到,action信息的与AndroidManifest.XMl文件里的action信息相对应,而category信息则是没写,系统自动添加。

  • 注意点:
    1、在Activity中只能有一个action信息,但是可以有多个category信息,通过intent.addCategory(具体信息);添加;
    2、在AndroidManifest.xML中可以存在多个action和category,对于其中的一个action,系统有可能会找到一个Activity来处理这个action,也可能找到多个,也可能一个没有。

       1)一个Activity的时候,那就很简单了,直接启动的就是这个Activity。
       2)多个Activity的时候,那么系统就会提示你,让你选择,(具体见下:跳转到其他程序的活动)
       3)一个没有,那么系统就会抛出异常,如下图所示:

Android学习系列-----1  Android显示Intent和隐式Intent在Activity中的应用

出现了ActivityNotFoundException,也就是说没有找到匹配的Activity来响应Intent。此时,我们在进行这部分代码操作的时候就需要捕捉异常,或抛出异常。

 try{
    Intent intent = new Intent("com.example.administrator.myapplication.A");
    startActivity(intent);
 }
 catch(ActivityNotFoundException e){
    LOG.d("FirstActivity.this","找不到该活动");
 }

Android学习系列-----1  Android显示Intent和隐式Intent在Activity中的应用

跳转到外部程序的活动

下面是隐式Intent跳转到外部程序的活动,我们最常见的就是比如要访问一个网站,我们就需要跳转到一个浏览器,又比如我们在逛美团的时候,需要打商家话,跳转到电话界面都需要用到这个。与上面的隐式Intent内部活动跳转不同,这里你如果要跳转到一个浏览器或者电话界面不需要在AndroidManifest.xml里面进行配置,下面是跳转到电话界面的代码:

 Intent intent = new Intent(Intent.ACTION_DIAL);
 startActivity(intent);

还是简单的两句话,就能跳转到电话界面,当然你也可以写的更具体:

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

通过这么写,你可以直接将号码输入到电话界面的输入框内,其中setData()方法,表示接收一个Uri对象,指定Intent中正在操作的数据,以字符串的形式传到Uri.parse()方法。当然还有别的,比如将参数改成是:tent.ACTION_WEB_SEArch,就可以打开网络搜索引擎(即浏览器)等等
下面说的是,当跳转到外部活动的时候,同时在AndroidManifest.xml也进行了配置,而且字符串的名称也匹配,会出现什么情况。

 <activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.DIAL"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
 </activity>
Intent intent = new Intent(Intent.ACTION_DIAL);
startActivity(intent);

如上两段代码,显示的就是系统带着AndroidManifest.xml内的action,找到了多个Activity的情况,一个是自定义的DIAL,我们称之为假的电话界面,一个是手机自带电话界面,运行之后,出现了下图:

Android学习系列-----1  Android显示Intent和隐式Intent在Activity中的应用

可以看到,这里就是系统会提示我们去选择打开哪一个Activity,其中的My Application就是我们在上面SecondActivity的<activity>标签里添加action信息,系统根据这个信息,找到了FirstActivity存在匹配的信息而产生的。

脚本宝典总结

以上是脚本宝典为你收集整理的Android学习系列-----1 Android显示Intent和隐式Intent在Activity中的应用全部内容,希望文章能够帮你解决Android学习系列-----1 Android显示Intent和隐式Intent在Activity中的应用所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。