android中,关于Intent相关内容是一整套强大的解耦合机制,跟spring的依赖注射有异曲同工之妙,这里来举几个简单应用的例子.
1\如何让用户不需要,而系统必须有的组件从ui中消失.
比如mid中的phone、mms和contact应用(如上图椭圆标注的),对于没有电话功能的mid来说,让它们出现在ui中是非常扎眼的,对于有完美主义倾向的人来说,永远用不到的东西出现在选单当中,会让用户觉得没有被尊重的感觉,所以,很有必要让它们在背后默默的服务,而不在用户面前碍眼.
解决的办法很简单,进入到对应应用的andoridmunifest.xml文件你会看到这样的代码:
----------------------------------------------------------------------------------------------------------
<activity android:name="Settings" android:label="@string/settings_label"
android:taskAffinity="com.android.settings"
android:clearTaskOnLaunch="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.settings.SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
---------------------------------------------------------------------------------------------------------
把红色的这一行拿掉即可.
一个Activity如果拥有"android.intent.category.LAUNCHER"这个属性,则表示它属于这个应用为普通用户提供的入口,就像超市为顾客指定的入口一样,用户可以通过应用程序的门进入到应用内部体验.而对程序开发者而言,进入的方式就不限于launcher属性的Activity了,通过intent提供的action,category,class,type都可以匹配到对应的Activity,通过intent调用Activity分为显式调用和隐式调用,显示调用局限于应用内部,而隐式调用则完全是解耦的全局匹配模式.非常之方便.
2\如何像astro一样同一个应用在allappsview里面显示多个快捷方式呢?
同样的,在你需要它显示的Activity里面加上<category android:name="android.intent.category.LAUNCHER" />即可.则像上图中的方形标注的快捷方式一样,来自同一个应用,但是有自己独立的快捷方式.要修改图片和文字内容也很简单,配置以下紫色的项即可.
----------------------------------------------------------------------------------------------------------
<activity android:name="WirelessSettings"
android:label="@string/wireless_networks_settings_title"
android:icon="@drawable/ic_launcher_settings"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.settings.WIRELESS_SETTINGS" />
<action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
</activity>
----------------------------------------------------------------------------------------------------------