為了方便描述,這里先定義兩個(gè)app的名字:
調(diào)用方:A
被調(diào)用方:B
A調(diào)用B的Activity名字:AActivity
被調(diào)用方的Activity名字:BActivity
一個(gè)很可能出現(xiàn)的異常:
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=xxx/.xxx.BActivity } from null (pid=3202, uid=2000) requires xxx.permission
在B的manifest.xml的manifest標(biāo)簽里定義自定義權(quán)限(signature代表同樣簽名的app才可以調(diào)用)
<permission
android:name="xxx.permission"
android:label="權(quán)限描述"
android:permissionGroup="權(quán)限組名,隨便寫"
android:protectionLevel="signature"/>
還需要在B的manifest.xml里寫上類似下面的代碼,注意最好添加android:exported="true",雖然如果intent-filter下面有action會(huì)默認(rèn)android:exported為true,但是最好還是寫上,因?yàn)榧词褂衋ction也可以將android:exported設(shè)置為false的
(例如這里叫BActivity)
(如果需要隱藏這個(gè)app的圖標(biāo),就添加類似下面的data屬性)
<activity
android:name=".BActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<data
android:host="隨便寫"
android:scheme="隨便寫" />
</intent-filter>
</activity>
然后在A的manifest.xml的manifest標(biāo)簽里寫上,否則如果先安裝A再安裝B會(huì)出現(xiàn)上面說的授權(quán)錯(cuò)誤
<uses-permission android:name="xxx.permission"/>