通过单击外部链接在 WebView 中打开页面

时间:2021-02-28 19:02:55

标签: java android webview

我有一个网站,有网页版和网页视图。需要直接在应用程序(如果已安装)中打开用于恢复用户在其电子邮件中收到的密码的链接。

将以下代码添加到 AndroidManifest.xml 后,我可以通过单击链接打开应用程序。

 <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="*" android:scheme="myapp"/>
 </intent-filter>

我创建的用于测试的链接:

<a href="myapp://www.site.com/password-reset/token/abc123">Click</a>

但是,它总是在应用中打开主页,而不是在链接中打开特定页面。

我是否需要对应用进行任何进一步的修改来解释这种类型的链接?

主要活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    webView = findViewById(R.id.webview);
    webView.loadUrl("https://www.site.app");

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView wv, String url) {
            
        }

        @Override
        public void onPageFinished(WebView view, String url) {

        }
   });
}

解决方案:

    Intent intent = getIntent();
    Uri data = intent.getData();
    
    if (data != null && data.toString().startsWith("myapp:")) {
        urlIntent = data.toString().replace("myapp", "https");
    } else {
        urlIntent = "https://www.site.app";
    }

    webView.loadUrl(urlIntent);

1 个答案:

答案 0 :(得分:1)

Deeplinks 通常只会触发打开应用程序,它们不会帮助您导航或打开特定位置,除非您定义基于 FragmentActivityintent-filters 或手动处理。

您应该首先从 URL 获取包含 intent 的数据,然后将其作为 WebView 提供给 URL。您可以在 onNewIntentonCreate 方法中这样做;

override fun onNewIntent(intent: Intent){
    super.onNewIntent(intent)

    val uri = intent.data
}

然后在 WebView 中加载它;

webview.loadUrl(uri.toString())