正在打开来自应用的 android 个深层链接
Opening android deep links from app
我正在我的应用程序中实施深度 links,但无法找到一种方法,也找不到从我自己的应用程序中打开它们的示例。例如:我希望打开某个横幅会打开 myapp://game/1
link,这会导致我的应用程序中出现另一个 activity。我该怎么做?
您应该在清单中注册深度 linking 方案。
<activity android:name=".DeepLinkingActivity"
android:configChanges="orientation|screenSize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myapp" />
</intent-filter>
</activity>
有了这个,DeepLinkingActivity 将在单击具有已定义方案的 link 时打开。并在 activity 句柄中做什么:
private final String GAME_LINK = "game";
private final String VIDEO_LINK = "video";
private static String PASSED_LINK = "PassedLink";
public static Intent createIntent(String link, Context context) {
Intent intent = new Intent(context, DeepLinkingActivity.class);
intent.putExtra(PASSED_LINK, link);
return intent;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
String host;
String link = getIntent().getStringExtra(PASSED_LINK);
if(TextUtils.isEmpty(link)) {
Intent intent = getIntent();
if (intent.getData() != null) {
Uri data = intent.getData();
host = data.getHost();
} else {
// No links
}
} else {
Uri data = Uri.parse(link);
host = data.getHost();
}
if(host.equals(GAME_LINK)) {
// myapp://game/
// Do something
} else if(host.equals(VIDEO_LINK)){
// myapp://video/
// Do something
} else {
// Do something
}
...
}
然后您可以从您的小部件调用:
widget.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(DeepLinkingActivity.createIntent("linik_for_this_wiget"), getContext());
}
});
如果您在 WebView 中有 links,您也可以覆盖 shouldOverrideUrlLoading
我正在我的应用程序中实施深度 links,但无法找到一种方法,也找不到从我自己的应用程序中打开它们的示例。例如:我希望打开某个横幅会打开 myapp://game/1
link,这会导致我的应用程序中出现另一个 activity。我该怎么做?
您应该在清单中注册深度 linking 方案。
<activity android:name=".DeepLinkingActivity"
android:configChanges="orientation|screenSize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myapp" />
</intent-filter>
</activity>
有了这个,DeepLinkingActivity 将在单击具有已定义方案的 link 时打开。并在 activity 句柄中做什么:
private final String GAME_LINK = "game";
private final String VIDEO_LINK = "video";
private static String PASSED_LINK = "PassedLink";
public static Intent createIntent(String link, Context context) {
Intent intent = new Intent(context, DeepLinkingActivity.class);
intent.putExtra(PASSED_LINK, link);
return intent;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
String host;
String link = getIntent().getStringExtra(PASSED_LINK);
if(TextUtils.isEmpty(link)) {
Intent intent = getIntent();
if (intent.getData() != null) {
Uri data = intent.getData();
host = data.getHost();
} else {
// No links
}
} else {
Uri data = Uri.parse(link);
host = data.getHost();
}
if(host.equals(GAME_LINK)) {
// myapp://game/
// Do something
} else if(host.equals(VIDEO_LINK)){
// myapp://video/
// Do something
} else {
// Do something
}
...
}
然后您可以从您的小部件调用:
widget.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(DeepLinkingActivity.createIntent("linik_for_this_wiget"), getContext());
}
});
如果您在 WebView 中有 links,您也可以覆盖 shouldOverrideUrlLoading