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

Android中接收分享URL的Intent失效:无法打开目标Activity

解决Android接收分享URL并填充到指定Activity的问题

问题根源

你当前把ACTION_SEND的Intent Filter和主Activity的MAIN/LAUNCHER放在同一个<intent-filter>中,导致系统分享时会打开主Activity而非目标的GeturlActivity。另外,Patterns.WEB_URL的全匹配逻辑过于严格,可能过滤掉部分带附加内容的合法分享链接。

分步解决方案

1. 修正AndroidManifest.xml配置

将ACTION_SEND的Intent Filter单独配置到GeturlActivity的声明中,主Activity仅保留启动相关的Filter:

<!-- 主Activity的Intent Filter -->
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<!-- GeturlActivity的Intent Filter -->
<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>

确保GeturlActivity在Manifest中的完整声明包含exported属性(适配Android 12+):

<activity
    android:name=".GeturlActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

2. 优化GeturlActivity的分享数据处理逻辑

  • 移除过于严格的全URL匹配,改为提取文本中的第一个有效URL
  • 添加onNewIntent方法处理Activity复用场景下的分享请求,避免数据不更新

修正后的GeturlActivity.java代码:

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;
import android.util.Patterns;

public class GeturlActivity extends AppCompatActivity {
    private EditText urlInput;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_geturl);
        urlInput = findViewById(R.id.urlinput);
        handleShareIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        handleShareIntent(intent);
    }

    private void handleShareIntent(Intent intent) {
        if (Intent.ACTION_SEND.equals(intent.getAction()) && "text/plain".equals(intent.getType())) {
            String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
            if (!TextUtils.isEmpty(sharedText)) {
                Uri extractedUrl = extractUrlFromText(sharedText);
                urlInput.setText(extractedUrl != null ? extractedUrl.toString() : sharedText);
            }
        }
    }

    private Uri extractUrlFromText(String text) {
        if (TextUtils.isEmpty(text)) return null;
        java.util.regex.Matcher matcher = Patterns.WEB_URL.matcher(text);
        return matcher.find() ? Uri.parse(matcher.group()) : null;
    }
}

3. 额外注意事项

  • 测试时使用不同应用(如浏览器、社交APP)分享URL,验证是否能直接打开GeturlActivity并填充链接
  • 若需支持多类型分享(如纯链接、带描述的链接),可进一步调整extractUrlFromText方法的匹配逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:51:36