应用清单文件<intent-filter>中android:priority运用
应用清单文件中android:priority运用
需求
Android车机集成了高德地图,地图中涉及到在线地图、实时路况等,需要网络可用,会有跳转wifi设置的快捷按键,通过该按键能成功跳转至系统WiFi设置界面。
分析
地图使用Android标准的action进行跳转。调用示例如下:
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
而车机系统中除了原生Settings应用可以响应外,针对项目功能和UI需求添加了新的设置应用,该设置应用中同样存在wifi设置项。故希望WiFi快捷响应能跳转到产品自研的设置应用中。
实现
一、原生设置中应用清单文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
package="com.android.settings"
coreApp="true"
android:sharedUserId="android.uid.system">
...
<activity
android:name="Settings$WifiSettingsActivity"
android:label="@string/wifi_settings"
android:icon="@drawable/ic_settings_wireless"
android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.WIFI_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.wifi.WifiSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
查看官方android:priority有如下说明:【https://developer.android.google.cn/guide/topics/manifest/intent-filter-element.html】
android:priority 就处理过滤器所描述类型的 intent 而言,应该为父组件指定的优先级。此属性对 Activity和广播接收器都有意义:
它说明了某个 Activity 对与过滤器匹配的 Intent 的响应能力,这是相对于也可以响应该 Intent的其他 Activity 的响应能力。当 Intent 可由优先级不同的多个 Activity 处理时,Android 只会将优先级值较高的 Activity 视为 Intent 的潜在目标。
它控制按什么顺序执行广播接收器以接收广播消息。优先级值越高,调用顺序越靠前。(该顺序仅适用于同步消息;对于异步消息,系统会忽略该顺序。)只有在您确实需要对接收广播施加特定顺序或想要强制 Android 优先选用某个 Activity 时,才能使用此属性。
值必须是一个整数,如“100”。数值越高,优先级也就越高。默认值为 0。
二、故在自研的设置应用中,同样添加该过滤器,设置一个更高的priority即可。
<intent-filter android:priority="1000">
<action android:name="android.settings.WIFI_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
经验证,使用示例代码或am start -a android.settings.WIFI_SETTINGS均可自动跳转至自研的设置应用中。
本文地址:https://blog.csdn.net/shusuanly/article/details/110640337