在webview上共享whatsapp

Sem*_*ing 4 android webview

我有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)

Al *_*hik 7

在您的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)


msb*_*bit 5

看起来,如果您要从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)