相信做android应用开发的朋友对intent组件都已经是相当熟悉了,这里鄙人总结一下intent的妙用,希望对大家有帮助。
intent妙用之编写自己的android主界面
众所周知,android的主界面名为laucher2,功能强大,会在android启动之后运行,也是所有其他应用程序的入口程序。那么,如何让自己的应用程序取代laucher2的位置,成为android系统的主界面呢?其实说出来很简单,接下来,我就来为大家揭开这其中的神秘面纱。
首先,我们来看看一个普通的应用程序的intent声明:
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
第二行<action android:name="android.intent.action.MAIN" />表示这个activity是当前应用程序的主activity,而第二行表示当前activity在lancher中加载。
这么理解的却是没错,但事实上,有更加简单的理解方式。这里请容许我先卖个关子。我们继续往下看。
既然是想让我们自己的应用程序取代laucher的位置,那么我们就来看一下lancher的intent声明是怎么样的吧:
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.HOME"/>
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.MONKEY" />
- </intent-filter>
大家看出这两个intent声明之间的差别了吗?没错,当出现 <category android:name="android.intent.category.HOME"/> 的时候,我们的应用程序就会变成跟lancher具有相同功能的(当然,我指的仅仅是主界面,laucher的功能是在是太强大了),成为android系统的主界面,并且,当我们按下Home键的时候,会出现一个选择界面,是不是发现你的应用程序和laucher同时出现在了选择框中呢?如果是,那么恭喜你,从功能上来说,你已经实现了。如果没有看到,请email我louiswangbing@gmail.com。
但是,所谓一山不容二虎,同时有两个主界面存在当然不是我们想要的。
如果你有android源代码的话,你甚至可以把laucher删掉,直接将你自己的应用程序编译到android系统中,这样,系统启动的时候就会直接运行你的应用程序,而你的应用程序就会堂而皇之地鸠占鹊巢,顺理成章的成为系统的主界面,并且当你按下Home键的时候,就会跳到你的应用程序的主activity了!!
如果你只是一个功能上的追求者,那么看到这里你就可以关掉这个页面去试试上面的功能了。
如果你是一个好奇心比较强的人,那么请跟着我继续往下看。
刚才我说过,intent声明的理解问题。事实上,你可以有更好的理解方式,当然,这要建立在你对android系统的启动进程有一定的了解的基础上。
简单来说,intent其实就是一个条件过滤器,activity的intent声明的每一条都可以作为一个过滤条件,条目越多,过滤条件也就越强,定位起来也就越容易。相信这个原理学过数据库的朋友理解起来更加容易。你可以将整个android系统中所有的activity都集中起来当成是一个数据库,而intent本身就是一条select语句,其中每一项声明都是一项过滤条件,而过滤之后剩下的,就是将要被调用的activity。当过滤条件足够强大或者过滤条件比较特殊的时候,最后剩下的只有一个activity,那么系统会毫不犹豫地启动它;当过滤条件不足导致过滤之后还剩下比较多的activity的时候,系统会将满足这些条件的所有的activity用一个listview列出来让你选择。
相信原理大家都已经很清楚了,那么上面所述的这个功能就很好理解了。没错,android在启动的时候会有一个PackageManager选择系统中满足过滤条件:
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.HOME"/>
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.MONKEY" />
在整个intent妙用章节中,这一章算是比较特殊的,因为虽然所有的章节运用的原理基本相通,也就是我上面说到的原理,但是后续章节的intent过滤条件都是可以由用户自己定义、手动修改的,而唯独只有这个是不能改的,你只能决定去适应或者不适应这个过滤条件,而不能去改变这个过滤条件,就像你只能去适应这个社会,却很难改变它--或许不是不能,而是暂时还能找到途径......
有时候真的,生活跟计算机,居然有如此之多的相似之处......