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

Android Studio开发App如何获取浏览器当前打开的URL?

嘿,这个问题我之前帮不少开发者梳理过思路——Android系统出于隐私和安全限制,并没有开放让APP直接抓取任意浏览器当前URL的通用API,不过根据你的使用场景,还是有几种合法可行的方案,我给你逐一拆解:

方案1:通过分享功能让用户主动传递URL(最推荐)

这是最合规、兼容性最好的方式,完全不需要特殊权限,核心是让用户在浏览器里点击「分享」,选择你的APP来传递URL。

实现步骤:

  1. 在AndroidManifest.xml里给接收URL的Activity配置intent-filter:
<activity android:name=".ReceiveUrlActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>
  1. 在ReceiveUrlActivity里解析接收的内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_receive_url);

    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            String sharedContent = intent.getStringExtra(Intent.EXTRA_TEXT);
            // 验证是否为合法URL
            if (sharedContent != null && android.util.Patterns.WEB_URL.matcher(sharedContent).matches()) {
                // 这里就拿到了用户分享的浏览器URL
                Log.d("ReceivedURL", "获取到的URL: " + sharedContent);
            }
        }
    }
}

这种方式的优势是用户主动授权,不会触发隐私合规问题,几乎适配所有浏览器。

方案2:通过辅助功能(Accessibility Service)监听浏览器界面

如果你的场景必须自动获取URL,可以借助辅助功能,但这个方案有不少限制:需要用户手动开启辅助功能、只能针对特定浏览器适配(不同浏览器地址栏的控件ID不一样),而且Google Play对这类功能的审核比较严格。

实现步骤:

  1. 创建辅助服务类:
public class BrowserUrlAccessibilityService extends AccessibilityService {

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        // 监听窗口切换事件,比如浏览器打开新页面
        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
            AccessibilityNodeInfo rootNode = getRootInActiveWindow();
            if (rootNode != null) {
                // 以Chrome为例,地址栏的控件ID是com.android.chrome:id/url_bar
                List<AccessibilityNodeInfo> urlNodes = rootNode.findAccessibilityNodeInfosByViewId("com.android.chrome:id/url_bar");
                if (!urlNodes.isEmpty()) {
                    AccessibilityNodeInfo urlNode = urlNodes.get(0);
                    String currentUrl = urlNode.getText().toString();
                    Log.d("BrowserURL", "当前Chrome的URL: " + currentUrl);
                    // 可通过广播/接口把URL传递给你的主APP
                }
                rootNode.recycle();
            }
        }
    }

    @Override
    public void onInterrupt() {
        // 服务中断时的处理逻辑
    }
}
  1. 在AndroidManifest.xml注册服务:
<service
    android:name=".BrowserUrlAccessibilityService"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/accessibility_service_config" />
</service>
  1. 创建res/xml/accessibility_service_config.xml配置文件:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_service_description" />

注意:你需要为不同浏览器(比如Firefox、Edge)单独适配控件ID,且必须向用户明确说明辅助功能的用途,避免隐私投诉。

方案3:如果是你的APP触发打开的网页(WebView/Custom Tabs)

如果浏览器页面是你的APP自己打开的(比如用WebView或Chrome自定义标签),那可以直接监听页面加载的URL:

  • WebView监听:
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // 这里拿到WebView当前加载完成的URL
        Log.d("WebViewURL", "当前URL: " + url);
    }
});
  • Chrome自定义标签监听:
CustomTabsSession session = customTabsClient.newSession(new CustomTabsCallback() {
    @Override
    public void onNavigationEvent(int navigationEvent, Bundle extras) {
        super.onNavigationEvent(navigationEvent, extras);
        if (navigationEvent == CustomTabsCallback.NAVIGATION_FINISHED) {
            String currentUrl = session.getLastUrl();
            Log.d("CustomTabsURL", "当前URL: " + currentUrl);
        }
    }
});

总结

优先用方案1,合规且用户体验友好;如果必须自动获取,再考虑方案2,但要做好适配和隐私说明;如果是自己APP内的网页,直接用方案3即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:37:12