深度 link 未打开指定 Activity 但打开其他 Activity
Deep link not opening specified Activity but opens other Activity
我以编程方式创建了一个 DynamicLink
,其中包括 sub-domain 语法、一些标题和预览图像。我还指定了 IntentFilter
单击时应打开 activity。但是当 link 被点击时,它会打开另一个 Activity,它也有 Deep link。 page.link 域由 google 本身在 Firebase 控制台中提供
创建 Dynamic Link 的代码是
String e="https://learnandroid.page.link/?link=https://learn.android/&apn=com.learnandro&amv=16&st=Please view the ContentEvent&si="+some Image Url+"&afl=https://play.google.com/store/apps/details?id=app Package name";
Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance()
.createDynamicLink()
.setLongLink(Uri.parse(e))
.buildShortDynamicLink()
.addOnCompleteListener(new OnCompleteListener<ShortDynamicLink>() {
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task) {
Uri get=task.getResult().getShortLink();
Intent sh=new Intent(Intent.ACTION_SEND);
sh.setType("text/plain");
sh.putExtra(Intent.EXTRA_TEXT,"Vi ew the Amazing Event "+get);
startActivity(Intent.createChooser(sh,"View"));
}
});
Activity 的 Intent 过滤器给出为
<activity android:name=".content.Home"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<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:host="learn.android"
android:scheme="https" />
</intent-filter>
</activity>
但是当单击生成的 link 时,它会打开另一个 activity。
您可以尝试以下代码段:
val data: Uri? = intent?.data
if (Uri.EMPTY != data)
{
val id = intent.data?.getQueryParameter("ID")
intent = Intent(this, ActivityName::class.java)
startActivity(intent)
finish()
}
- 在getQueryParameter中,需要传递包含URL
中数据的KEY名称
- 在Manifest文件
中定义的Activity中定义这组代码
如果您在多项活动中有深度link,那么您应该使用android:pathPattern
来区分它们。
这里是示例代码
<data
android:host="learn.android"
android:pathPattern="/home"
android:scheme="https" />
并将 /home
添加到您的 link
String e="https://learnandroid.page.link/?link=https://learn.android/home/&apn=com.learnandro&amv=16&st=Please view the ContentEvent&si="+some Image Url+"&afl=https://play.google.com/store/apps/details?id=app Package name";
我以编程方式创建了一个 DynamicLink
,其中包括 sub-domain 语法、一些标题和预览图像。我还指定了 IntentFilter
单击时应打开 activity。但是当 link 被点击时,它会打开另一个 Activity,它也有 Deep link。 page.link 域由 google 本身在 Firebase 控制台中提供
创建 Dynamic Link 的代码是
String e="https://learnandroid.page.link/?link=https://learn.android/&apn=com.learnandro&amv=16&st=Please view the ContentEvent&si="+some Image Url+"&afl=https://play.google.com/store/apps/details?id=app Package name";
Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance()
.createDynamicLink()
.setLongLink(Uri.parse(e))
.buildShortDynamicLink()
.addOnCompleteListener(new OnCompleteListener<ShortDynamicLink>() {
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task) {
Uri get=task.getResult().getShortLink();
Intent sh=new Intent(Intent.ACTION_SEND);
sh.setType("text/plain");
sh.putExtra(Intent.EXTRA_TEXT,"Vi ew the Amazing Event "+get);
startActivity(Intent.createChooser(sh,"View"));
}
});
Activity 的 Intent 过滤器给出为
<activity android:name=".content.Home"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<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:host="learn.android"
android:scheme="https" />
</intent-filter>
</activity>
但是当单击生成的 link 时,它会打开另一个 activity。
您可以尝试以下代码段:
val data: Uri? = intent?.data
if (Uri.EMPTY != data)
{
val id = intent.data?.getQueryParameter("ID")
intent = Intent(this, ActivityName::class.java)
startActivity(intent)
finish()
}
- 在getQueryParameter中,需要传递包含URL 中数据的KEY名称
- 在Manifest文件 中定义的Activity中定义这组代码
如果您在多项活动中有深度link,那么您应该使用android:pathPattern
来区分它们。
这里是示例代码
<data
android:host="learn.android"
android:pathPattern="/home"
android:scheme="https" />
并将 /home
添加到您的 link
String e="https://learnandroid.page.link/?link=https://learn.android/home/&apn=com.learnandro&amv=16&st=Please view the ContentEvent&si="+some Image Url+"&afl=https://play.google.com/store/apps/details?id=app Package name";