在一个app中唤醒拉起另一个app应用(DeepLink拉活)

假如使用A应用拉起唤醒B应用中的某个具体页面:
在A中:

String url = "app0423://example.com:/main";
Intent intent1 = new Intent();
intent1.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse(url );
intent1.setData(uri);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent1);

在B应用中:
AndroidManifest.xml

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <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="app0423" android:host="example.com" android:path="/main"/>
    </intent-filter>
</activity>

其中action是 Intent隐式跳转的标志:
data标签可以定位到具体的Activity
scheme :app0423
host:example.com
path:/main
对应Uri:app0423://example.com:/main

/**
 * 从deep link中获取数据
 */
private void getData() {

    Intent intent = getIntent();
    String pag = intent.getPackage();

    Uri data = getIntent().getData();

    if (data== null)
        return;
    try {
        String scheme = data.getScheme();
        String host = data.getHost();
        List<String> params = data.getPathSegments();
        // 传过来的数据
        String testId = params.get(0);
        String text = "Scheme: " + scheme + "\n" + "host: " + host + "\n" + "params: " + testId;
        System.out.println(text);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

其中 intent.getPackage() 为null

发布了11 篇原创文章 · 获赞 0 · 访问量 124

猜你喜欢

转载自blog.csdn.net/qq_32898021/article/details/105713200