ResolverActivity 优先级
原生CarSetting中以蓝牙设置为例, 优先级为1, 该值越大,优先级越高
<activityandroid:name=".common.CarSettingActivities$BluetoothSettingsActivity"android:windowSoftInputMode="adjustPan"android:exported="true"><intent-filter android:priority="1"><action android:name="android.settings.BLUETOOTH_SETTINGS" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><meta-data android:name="com.android.car.settings.TOP_LEVEL_HEADER_KEY"android:value="@string/hk_BluetoothSettingsActivity" /><meta-data android:name="distractionOptimized" android:value="true"/></activity>
除system/priv-app目录下app外,普通app无法有效设置优先级
当存在多个Activity可以响应Intent时,会调用到PMS的chooseBestActivity方法
此处需要注意两点:
-
之前提到的优先级,三方app 设置无效,如果原生系统设置设置了优先级,则不会弹出ResolverActivity页面。
-
如果之前设置过默认应用,选择默认应用
默认应用存储位置:data\system\users\0\package-restrictions.xml
<preferred-activities><item name="com.android.app.launcher/.Launcher" match="100000" always="true" set="2"><set name="com.android.app.launcher/.Launcher" /><set name="com.android.car.settings/.FallbackHome" /><filter><action name="android.intent.action.MAIN" /><cat name="android.intent.category.HOME" /><cat name="android.intent.category.DEFAULT" /></filter></item></preferred-activities>
startActivity到选择Activity的调用栈如下