繁体   English   中英

Android WebView app err_unknown_url_scheme(mailto,外部链接,网站内部链接)

[英]Android WebView app err_unknown_url_scheme (mailto, external links, website internal links)

我已使用此代码并且工作正常(webview 链接和网站的外部链接)但是,

我在尝试点击以 mailto 开头的 html 链接时收到“ERR_UNKNOWN_URL_SCHEME”:

*所以我需要我的网站链接在 webview 应用程序中工作,其他外部链接,如 facebook,instagram,所有其他人......从浏览器打开 android 或应用程序: 电话:从应用程序/电话发送。

任何人都可以帮我解决这个问题吗? 我对 java 知之甚少:(

谢谢。

public class MainActivity extends AppCompatActivity {

String websiteURL = "https://dwosix.com"; // sets web url
private WebView webview;
SwipeRefreshLayout mySwipeRefreshLayout;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if( ! CheckNetwork.isInternetAvailable(this)) //returns true if internet available
    {
        //if there is no internet do this
        setContentView(R.layout.activity_main);
        //Toast.makeText(this,"No Internet Connection, Chris",Toast.LENGTH_LONG).show();

        new AlertDialog.Builder(this) //alert the person knowing they are about to close
                .setTitle("No internet connection available")
                .setMessage("Please Check you're Mobile data or Wifi network.")
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                })
                //.setNegativeButton("No", null)
                .show();

    }
    else
    {
        //Webview stuff
        webview = findViewById(R.id.webView);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl(websiteURL);
        webview.setWebViewClient(new WebViewClientDemo(){
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("mailto:") || url.startsWith("tel:")) {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                } else {
                    // Stay within this webview and load url
                    view.loadUrl(url);
                }
                return true;
            }
        });
    }

    //Swipe to refresh functionality
    mySwipeRefreshLayout = this.findViewById(R.id.swipeContainer);

    mySwipeRefreshLayout.setOnRefreshListener(
            new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    webview.reload();
                }
            }
    );
}

private class WebViewClientDemo extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        if((String.valueOf(request.getUrl())).contains("dwosix.com")) {
            view.loadUrl(String.valueOf(request.getUrl()));
        }
        else {
            view.getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, request.getUrl()));
        }
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        mySwipeRefreshLayout.setRefreshing(false);
    }
}

//set back button functionality
@Override
public void onBackPressed() { //if user presses the back button do this
    if (webview.isFocused() && webview.canGoBack()) { //check if in webview and the user can go back
        webview.goBack(); //go back in webview
    } else { //do this if the webview cannot go back any further

        new AlertDialog.Builder(this) //alert the person knowing they are about to close
                .setTitle("EXIT")
                .setMessage("Are you sure. You want to close this app?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }
}

}

class CheckNetwork {

private static final String TAG = CheckNetwork.class.getSimpleName();

public static boolean isInternetAvailable(Context context)
{
    NetworkInfo info = ((ConnectivityManager)
            context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

    if (info == null)
    {
        Log.d(TAG,"no internet connection");
        return false;
    }
    else
    {
        if(info.isConnected())
        {
            Log.d(TAG," internet connection available...");
        }
        else
        {
            Log.d(TAG," internet connection");
        }
        return true;

    }
}

}

尝试这个

if(url.startsWith("mailto:")){
        MailTo mt = MailTo.parse(url);
        Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("text/plain");
        i.putExtra(Intent.EXTRA_EMAIL, new String[]{mt.getTo()});
        i.putExtra(Intent.EXTRA_SUBJECT, mt.getSubject());
        i.putExtra(Intent.EXTRA_CC, mt.getCc());
        i.putExtra(Intent.EXTRA_TEXT, mt.getBody());
        mContext.startActivity(i);
        view.reload();
        return true;
    } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM