You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android的Chrome自定义标签中实现URL变化监听器?

监听Chrome自定义标签URL变化并跳转Activity的方案

好问题!Chrome自定义标签本身并没有提供直接监听URL变化的原生监听器,但我们有两种靠谱的方案来实现你想要的效果——捕获URL变化并打开对应Android Activity:

方案一:使用CustomTabsNavigationCallback监听导航事件

这个回调可以捕获Custom Tabs内的导航行为(比如用户点击链接跳转、页面开始/结束加载等),我们可以通过它间接获取URL变化:

  1. 创建自定义的CustomTabsNavigationCallback实例,重写onNavigationEvent方法:
CustomTabsNavigationCallback callback = new CustomTabsNavigationCallback() {
    @Override
    public void onNavigationEvent(int navigationEvent, Bundle extras) {
        // 捕获页面开始加载新URL的事件
        if (navigationEvent == CustomTabsNavigationCallback.NAVIGATION_STARTED) {
            String newUrl = extras.getString(CustomTabsIntent.EXTRA_URL);
            if (newUrl != null) {
                // 在这里判断URL是否符合你的跳转条件,然后打开对应Activity
                if (newUrl.contains("your-target-path")) {
                    Intent intent = new Intent(MainActivity.this, TargetActivity.class);
                    intent.putExtra("url", newUrl);
                    startActivity(intent);
                    // 如果需要关闭Custom Tabs,可以添加FLAG控制
                    // customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                }
            }
        }
    }
};
  1. 将回调绑定到CustomTabsIntent.Builder:
String url = "https://paul.kinlan.me/";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
// 设置导航回调
builder.setNavigationCallback(callback);
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse(url));

注意:这个方法能监听大部分用户触发的导航行为,但对于页面内的JavaScript跳转,可能无法完全捕获,具体取决于页面实现。

方案二:通过Intent Filter拦截特定URL跳转

如果你只需要捕获特定域名或路径的URL,并让系统直接跳转到你的Activity,可以用Intent Filter来实现:

  1. 在AndroidManifest.xml中给目标Activity添加Intent Filter:
<activity android:name=".TargetActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- 匹配你要拦截的URL,比如特定域名和路径 -->
        <data
            android:scheme="https"
            android:host="paul.kinlan.me"
            android:pathPattern="/your-target-path.*" />
    </intent-filter>
</activity>
  1. 在TargetActivity中获取跳转的URL:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_target);
    
    Uri incomingUri = getIntent().getData();
    if (incomingUri != null) {
        String url = incomingUri.toString();
        // 在这里处理URL相关逻辑
    }
}

适用场景:这种方式更适合深度链接场景,当用户点击符合规则的链接时,系统会弹出选择器(或者直接跳转到你的Activity,根据系统设置),无需监听Custom Tabs内部的每一次导航。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:41:17