【问题标题】:sharing whatsapp on webview在 webview 上分享 whatsapp
【发布时间】:2016-10-12 02:07:19
【问题描述】:

我有 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();
}
 }

【问题讨论】:

    标签: android webview


    【解决方案1】:

    在您的 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;
                    }
                }
    

    【讨论】:

    • 这可行,但是当我按下共享按钮时,它会启动 whatsapp,并且在发送消息后,当我返回我的网络视图时,它会显示 whatsapp 网络屏幕,而不是我的网络视图,其中存在共享按钮
    【解决方案2】:

    在html代码中,替换:

    <a href="whatsapp://send?text=Hello">
    

    与:

    <a href="intent://send?text=Hello#Intent;scheme=whatsapp;package=com.whatsapp;end">
    

    在此处查看 Chrome 的相关文档: https://developer.chrome.com/multidevice/android/intents#example

    【讨论】:

      【解决方案3】:

      如果您从 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);
      }
      

      【讨论】:

      • 这可行,但是当我按下共享按钮时,它会启动 whatsapp,并且在发送消息后,当我返回我的网络视图时,它会显示 whatsapp 网络屏幕,而不是我的共享按钮所在的网络视图。
      【解决方案4】:

      别忘了从网址中删除+

      this.webView.setWebViewClient(new WebViewClient(){
              @Override
              public boolean  shouldOverrideUrlLoading(WebView view, String url) {
                  if (url != null && url.startsWith("https://wa.me")) {
                      view.getContext().startActivity(
                              new Intent(Intent.ACTION_VIEW, Uri.parse(url.replace("+",""))));
      
                      return true;
      
                  } else {
                      return false;
                  }
              }
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        相关资源
        最近更新 更多