我有android webview应用程序,并且在网络源中有将新闻内容共享到whatsapp。它在移动浏览器中可以完美运行,但在网络视图中则无法运行。
它的显示文字whatsapp:// send?text = Hello world
这是我的代码
package com.web.viewers;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import com.daimajia.numberprogressbar.NumberProgressBar;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private String url = "http://www.myurl.com";
private NumberProgressBar progressBar;
private String TAG = this.getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeWebView();
}
@SuppressLint("SetJavaScriptEnabled")
private void initializeWebView() {
if (getIntent().getStringExtra("url") != null){
url = getIntent().getStringExtra("url");
}
Log.d(TAG, "initializeWebView: " + url);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl(url);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
progressBar = (NumberProgressBar)
findViewById(R.id.number_progress_bar);
progressBar.setVisibility(View.GONE);
}
public class WebChromeClient extends android.webkit.WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
progressBar.setProgress(newProgress);
}
}
public class WebViewClient extends android.webkit.WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view,
WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressBar.setVisibility(View.GONE);
}
}
@Override
public void onBackPressed() {
if (webView.canGoBack()){
webView.goBack();
} else {
showAlertDialog();
}
}
private void showAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setMessage("Tutup Aplikasi ini ?")
.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
})
.setPositiveButton("Ya", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
finish();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
Run Code Online (Sandbox Code Playgroud)
在您的WebViewClient()方法中添加以下代码,它将完美运行
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.startsWith("whatsapp://")) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
看起来,如果您要从Android上的WebView单击带有自定义方案的链接,则现在需要在WebViewClient中实现处理程序。
要使此工作正常进行,您需要将您的实现更新WebViewClient.shouldOverrideUrlLoading为以下内容:
@Override
public boolean shouldOverrideUrlLoading(WebView view,
WebResourceRequest request) {
Uri uri = request.getUrl();
if (Objects.equals(uri.getScheme(), "whatsapp")) {
try {
Intent intent = Intent.parseUri(request.getUrl().toString(), Intent.URI_INTENT_SCHEME);
if(intent.resolveActivity(getPackageManager()) != null)
startActivity(intent);
return true;
} catch (URISyntaxException use) {
Log.e(TAG, use.getMessage());
}
}
return super.shouldOverrideUrlLoading(view, request);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10616 次 |
| 最近记录: |