H5通过scheme跳转指定Activity的几种方式

如果是App内部WebView点击跳转指定Activity

第一种 在清单文件配置intent-filter

1
2
3
4
5
6
7
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="personal_page_info"
android:scheme="${app_scheme}" />
</intent-filter>

WebView设置:

mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String httpurl) {
    if (httpurl.startsWith("app:")) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(httpurl));
        startActivity(intent);
    }
    return false;
}
});

如果还需要传值的话, 在Activity中进行数据解析:

1
2
3
4
5
6
if (intent.dataString.orEmpty().isNotEmpty()) {
mUserId = intent.dataString.orEmpty().parseValue("userid", 0)
} else {
ActivityLauncher.bind(this)
}
if (mUserId == 0) finish()

第二种 不配置intent-filter的方式

只需在WebView的shouldOverrideUrlLoading方法中进行内链解析处理即可:

1
2
3
4
5
6
7
8
  @Override
public boolean shouldOverrideUrlLoading(WebView view, String httpurl) {
if (httpurl.startsWith("app://jump_activity")) {
Intent intent = new Intent(context, XXXActivity.class));
startActivity(intent);
}
return false;
}

如果是外部浏览器页面点击跳转指定Activity

只需在清单文件中对指定Acticity做intent-filter配置即可

1
2
3
4
5
6
7
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="personal_page_info"
android:scheme="${app_scheme}" />
</intent-filter>

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%