Android 隱式intent相信大家都有用過,大部分場景我們用顯式intent已經能滿足我們的業務需求,隱式intent大部分都是用來啟動系統自帶的Activity或Service之類的組件。昨天有個業務場景就是,module app依賴於第三方依賴庫module library,我在module library里面有個Activity A,現在需要在Activity A里面啟動 module app里面的Activity B。一般的解決方法是:讓module library依賴於module app,這樣library就能找到app里面的Activity B,可是這樣就變成了雙向依賴,顯然是不可能的。我想了一下,可以用隱式intent來實現這個功能,而且實現代碼最簡潔,不用修改或添加其他代碼。
隱式intent很簡單,首先要在 module app的AndroidManifest.xml里面注冊Activity B,代碼如下:
<activity android:name="com.xjx.demo.home.BActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="com.demoBActivity.action" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
<intent-filter>是隱式intent必須的,其中<action android:name>屬性是自定義的,寫什么都可以,最好是自己的項目名,<category >屬性使用默認的 <category android:name="android.intent.category.DEFAULT" />。
注冊Activity完成了,現在可以在module library里的Activity A啟動module app里的Activity B了。
代碼如下:
//這里用到了隱式意圖,來啟動app庫里面的activity Intent intent = new Intent(); intent.setAction("com.demoBActivity.action"); intent.addCategory("android.intent.category.DEFAULT"); startActivity(intent);
action寫我們AndroidManifest注冊的action即可。
這樣即可實現在被依賴的module libray里面啟動主module app中的Activity或其他組件。實現了module之間代碼的解耦。