在 webview 上分享 whatsapp

问题描述:

我有 android webview 应用程序,并且在 web 源中有向 whatsapp 共享新闻内容.它在移动浏览器中运行良好,但在网络视图中不起作用.

I have android webview app and in the web source have sharing news content to whatsapp. It's works perfect from mobile browser but its doesn't work from web view.

它的显示文本 whatsapp://send?text=Hello world

its show text 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();
}
 }

在您的 WebViewClient() 方法中添加以下代码,它将完美运行

Add this below code in your WebViewClient() method and it will be working perfectly

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;
                }
            }