浏览器访问特定URL无法唤起指定Android Activity的问题求助
Android浏览器唤起指定Activity问题
我用Kotlin开发了一个Demo应用,用于测试Activity与浏览器的交互:点击按钮打开浏览器访问https://www.bbc.com,当用户在浏览器导航至https://www.bbc.com/news页面时,希望能唤起应用内的指定Activity。
我不确定该场景是否可行,或是对intent-filter和android.intent.category.BROWSABLE的作用存在误解。以下是我的实现细节:
AndroidManifest配置
<activity android:name=".MainActivity" android:exported="true" android:theme="@style/Theme.BrowserOpener"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".FirstActivity" android:theme="@style/Theme.BrowserOpener" /> <activity android:name=".SecondActivity" android:exported="true" android:theme="@style/Theme.BrowserOpener"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="www.bbc.com" /> <data android:path="/news" /> </intent-filter> </activity>
我定义了3个Activity:
- MainActivity:仅包含跳转至FirstActivity的按钮
- FirstActivity:仅包含打开浏览器访问
https://www.bbc.com的按钮 - SecondActivity:预期在用户访问
https://www.bbc.com/news时自动唤起
FirstActivity核心代码
class FirstActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { BrowserOpenerTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Opener(modifier = Modifier.padding(innerPadding)) } } } } } @Composable fun Opener(modifier: Modifier = Modifier) { val context = LocalContext.current Column { Text( text = "FirstActivity", modifier = modifier ) Button( onClick = { val browseIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.bbc.com/")) context.startActivity(browseIntent) }, enabled = true, ) { Text("Browser") } } }
SecondActivity核心代码
class SecondActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val data = intent.data Log.d("SecondActivity", "URI: $data") setContent { BrowserOpenerTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Final(modifier = Modifier.padding(innerPadding)) } } } } } @Composable fun Final(modifier: Modifier = Modifier) { Column { Text( text = "SecondActivity", modifier = modifier ) } }
目前我可以正常跳转至FirstActivity、打开浏览器并进入新闻页面,但无法唤起SecondActivity。我使用Google Pixel 6A真机,通过Android Studio运行应用。
内容的提问来源于stack exchange,提问作者Stefano Cappa
相关产品推荐
相关产品推荐

