Android开发:如何在浏览器应用中打开默认浏览器应用选择对话框
如何唤起默认浏览器选择对话框
以下是针对不同Android版本的实现方案,直接复制代码即可适配:
Android 12(API 31)及以上
系统提供了直接跳转至默认浏览器选择界面的API,两种实现方式:
方式1:直接跳转至默认应用设置页
val intent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) intent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName) startActivity(intent)
方式2:精准唤起浏览器选择弹窗
通过PackageManager创建指定浏览器类型的意图,直接弹出选择对话框:
val pm = packageManager val targetComponent = ComponentName(packageName, "com.your.package.YourBrowserActivity") val intentFilter = IntentFilter(Intent.ACTION_VIEW).apply { addCategory(Intent.CATEGORY_BROWSABLE) addDataScheme("http") } val intent = pm.createManageDefaultAppIntent(targetComponent, intentFilter) startActivity(intent)
Android 11(API 30)及以下
旧版本需通过选择器意图唤起对话框,部分定制系统可能会直接跳转至设置页:
// 构造浏览器意图 val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("http://")) browserIntent.addCategory(Intent.CATEGORY_BROWSABLE) // 创建选择器 val chooser = Intent.createChooser(browserIntent, "选择默认浏览器") chooser.putExtra(Intent.EXTRA_SELECTED_COMPONENT, ComponentName(packageName, "com.your.package.YourBrowserActivity")) chooser.putExtra(Intent.EXTRA_INTENT, browserIntent) startActivity(chooser)
如果上述代码未弹出对话框,可直接引导至应用详情页让用户手动设置:
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) intent.data = Uri.parse("package:$packageName") startActivity(intent)
关键前提
确保你的应用在Manifest中注册了浏览器相关的Intent Filter,示例如下:
<activity android:name=".YourBrowserActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> </activity>
内容的提问来源于stack exchange,提问作者Pratik Dhoriyani
相关产品推荐
相关产品推荐

