假如使用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