Android OS在哪里存储有关哪个是默认浏览器的信息?例如,如果Chrome是我的默认浏览器,那么它应该将该信息存储在某个地方,对吗?
我拉了
数据/数据/ com.android.browser / shared_prefs / com.android.browser_preferences.xml
此外,我想知道当应用程序成为任何类型的操作的默认应用程序时,那么该信息存储在哪里?
但这似乎并未包含该信息
是否有任何adb命令来获取此信息?
答案 0 :(得分:3)
但是,你可以获得任何Intent的默认应用设置:
public static void getDefaultApp(final Context context, final String url) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
ComponentName component = i.resolveActivity(context.getPackageManager());
if (component == null) {
// no app at all can handle this intent
// there might be profile restrictions applied since android 4.3
} else if (component.getPackageName().equals("android")) {
// there are multiple apps available handling your intent
// no default app is set, the Chooser will be shown
} else if (component.getPackageName().equals("com.android.browser")) {
// the default browser will be shown
// there might be multiple apps installed handling your intent
// however the user picked the default browser
} else if (component.getPackageName().equals("com.android.chrome")) {
// chrome will handle your intent
// there are multiple apps installed handling your intent most likely
// however the user picked this app
} else {
// some other app will handle your intent
// there are multiple apps installed handling your intent most likely
// however the user picked this app
Log.d(TAG, "user choice package: " + component.getPackageName());
Log.d(TAG, "user choice class: " + component.getClassName());
}
}
答案 1 :(得分:2)
Android使用 Intent 对象在活动之间进行通信。一个活动创建指定操作和数据的intent,并将其发送到系统。然后,系统确定哪个应用程序最适合响应该意图,并将该意图转发给所选应用程序。
例如,检查浏览器的AndroidManifest.xml文件,我看到它包含一个<intent-filter>
条目,指定应为方案“http”,“https”,“inline”的意图启动此活动,“text / html”,“text / plain”等等。
某些应用程序可能指定相同的intent过滤器,在这种情况下会发生冲突。例如,有许多维基百科应用程序注册“http://wikipedia.org/”的意图过滤器或类似的东西。
当系统遇到冲突时,会弹出一个对话框,显示“使用完整操作”,并包含与意图过滤器匹配的应用程序列表。此时,用户选择应该使用哪个活动,并且可选地指示系统记住他们的选择。
在维基百科示例中,假设用户选择了Wikipedia应用程序并选择让系统记住他们的选择。从那时起,系统将始终为启动“http://wikipedia.org/”的意图启动Wikipedia应用程序。它仍然会以“http:”开头的意图启动浏览器,因为它们与维基百科应用程序的意图过滤器不匹配。
至于系统实际保留其意图,应用程序和用户首选项列表的位置,我无法回答该部分。它可能是Android内部数据的一部分,其确切位置不是已发布API的一部分,如有更改,恕不另行通知。可能有一种方法可以告诉系统重置用户首选项,但我不知道怎么回事。