通过单击外部 link 在 WebView 中打开页面
Open page in WebView by clicking on an external link
我有一个网站,有网页版和网页视图。有必要直接在应用程序(如果已安装)中打开 link 以恢复用户在其电子邮件中收到的密码。
将下面的代码添加到 AndroidManifest.xml 后,我可以通过单击 link 打开应用程序。
<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>
Link我创建来测试:
<a href="myapp://www.site.com/password-reset/token/abc123">Click</a>
但是,它总是在应用程序中打开主页,而不是在 link 中打开特定页面。
我是否需要对应用程序进行任何进一步修改才能解释此类 link?
主要活动:
@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);
Deeplinks
通常只会触发应用程序打开,它们不会帮助您导航或打开特定位置,除非您定义 Fragment
或 Activity
基于 intent-filters
或手动处理。
你应该先从intent
获取包含URL
的数据,然后将其作为URL
提供给WebView
。您可以在 onNewIntent
或 onCreate
方法中这样做;
override fun onNewIntent(intent: Intent){
super.onNewIntent(intent)
val uri = intent.data
}
然后在 WebView
中加载它;
webview.loadUrl(uri.toString())
我有一个网站,有网页版和网页视图。有必要直接在应用程序(如果已安装)中打开 link 以恢复用户在其电子邮件中收到的密码。
将下面的代码添加到 AndroidManifest.xml 后,我可以通过单击 link 打开应用程序。
<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>
Link我创建来测试:
<a href="myapp://www.site.com/password-reset/token/abc123">Click</a>
但是,它总是在应用程序中打开主页,而不是在 link 中打开特定页面。
我是否需要对应用程序进行任何进一步修改才能解释此类 link?
主要活动:
@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);
Deeplinks
通常只会触发应用程序打开,它们不会帮助您导航或打开特定位置,除非您定义 Fragment
或 Activity
基于 intent-filters
或手动处理。
你应该先从intent
获取包含URL
的数据,然后将其作为URL
提供给WebView
。您可以在 onNewIntent
或 onCreate
方法中这样做;
override fun onNewIntent(intent: Intent){
super.onNewIntent(intent)
val uri = intent.data
}
然后在 WebView
中加载它;
webview.loadUrl(uri.toString())