如何使用setWebViewClient在android webview中的html页面上正确打开google play链接?

时间:2016-03-25 19:58:44

标签: javascript android html webview google-play

基本上我的问题是,我如何才能将这两个代码正确地放在一起运作!这正在杀死我试图搞清楚,所以我会详细解释......
任何帮助都会非常感激!!!

我在http://s-ka-paidbeats.com/app_tree/ourotherapps有一个网页。它列出了我在谷歌播放中制作的一堆应用。
在网页html中,我列出了标准链接,例如 - {{3 }}

我已经在所有我称之为“我的其他应用程序”的所有Android应用程序中创建了一个标签页面。该标签是一个显示相同html页面的webview窗口我正在谈论上述 - https://play.google.com/store/apps/details?id=com.yesorno.app.yesorno

问题是当用户访问我的任何Android应用程序中的webview窗口并点击我在html网页上列出的任何应用程序(http://s-ka-paidbeats.com/app_tree/ourotherapps)时,它会让他们在webview窗口中进行Google Play并要求他们在网页浏览窗口中登录谷歌播放(即使他们已经在他们的设备上登录谷歌播放)...这对用户来说非常难看和烦人。
< / p>

我想在用户访问&#34;我的其他应用时#34;我的任何应用程序中的选项卡,并点击其中一个应用程序在webview窗口中打开实际的谷歌播放应用程序(如果安装了谷歌播放)或在设备上安装的默认浏览器中打开(如果未安装谷歌播放)

我试图将所有(https://play.google.com/store/apps/details?id=)链接更改为html页面上的(market:// details?id =)链接,然后在我的应用中再次访问webview窗口但是这次我点击在列出的任何应用程序上,我只是出现页面错误&#34;页面不存在&#34;窗口

我已经研究过setWebViewClient,我确信有一些方法可以使用类似下面发布的代码来做到这一点

 webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (Uri.parse(url).getScheme().equals("market")) {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            Activity host = (Activity) view.getContext();
            host.startActivity(intent);
            return true;
        } catch (ActivityNotFoundException e) {
            // Google Play app is not installed, you may want to open the app store link
            Uri uri = Uri.parse(url);
            view.loadUrl("http://play.google.com/store/apps/" + uri.getHost() + "?" + uri.getQuery());
            return false;
        }

    }
    return false;
} });


我尝试将上面的代码添加到我当前的代码中,但现在我的加载对话框在webview加载时不会关闭....它只是永远保持加载....所以我把上面的代码片段再次出于我的代码,因为我不认为我将它放在正确的位置或我正在将两个代码正确地整合在一起....

我注意到我当前的代码已经定义了一个setWebViewClient,所以我不确定我是否允许在同一个代码中有两个或者我想尝试将它与当前的一个组合.......我有NO CLUE从哪里开始,我已经读了好几个小时....

这是我目前的代码

package com.yesorno.app.yesorno;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;
import com.yesorno.app.yesorno.NetorkConnection;
@SuppressLint("SetJavaScriptEnabled")
public class OtherApps extends AppCompatActivity {

private WebView webView;
NetorkConnection ntwrk_con = new NetorkConnection(this);
ProgressDialog dialog;


public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    TextView toolsresources5 = (TextView)findViewById(R.id.feedbacktextview);
    toolsresources5.setVisibility(View.INVISIBLE);





    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    webView = (WebView) findViewById(R.id.activity_main_webview);
    dialog = new ProgressDialog(OtherApps.this);


    if (ntwrk_con.isConnectingToInternet()) {

        webView();

    } else {
        dialog_box_for_internet();
    }

}

public void dialog_box_for_internet() {
    if (ntwrk_con.isConnectingToInternet()) {

        webView();

    } else {
        // dismis_dialog_box_for_internet = true;
        AlertDialog.Builder builder = new AlertDialog.Builder(
                OtherApps.this);
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.dialog_custom_titile, null);
        TextView title = (TextView) view.findViewById(R.id.myTitle);
        title.setText("Unable To Connect");
        builder.setCustomTitle(view);
        builder.setMessage("No Internet Connection")
                .setCancelable(false)
                .setPositiveButton("Retry",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                                int id) {
                                if (ntwrk_con.isConnectingToInternet()) {

                                    webView();

                                } else {
                                    new Thread_for_internet().execute();
                                }
                                // dialog.cancel();
                            }
                        })
                .setNegativeButton("Okay",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                                int id) {
                                finish();

                                // Gridview.super.onBackPressed();
                            }
                        });

        AlertDialog alert = builder.create();
        alert.show();
    }
}

class Thread_for_internet extends AsyncTask<String, Void, Boolean> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Loading..Please wait.");
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();

    }

    @Override
    protected Boolean doInBackground(String... args) {

        try {

            Thread.sleep(2000);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;

    }

    protected void onPostExecute(Boolean result) {
        dialog.dismiss();
        dialog_box_for_internet();

    }

}

public void webView() {


    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    });
    dialog.setMessage("Loading All Our Apps...\nPlease wait...");
    dialog.setCanceledOnTouchOutside(false);
    dialog.show();

    webView.loadUrl("http://s-ka-paidbeats.com/app_tree/ourotherapps.html");

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
}





@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (webView.canGoBack()) {
                    webView.goBack();
                } else {
                    finish();
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    boolean bRet=false;//set true is menu selection handled
    switch (item.getItemId()) {
        case R.id.action_settings_3:
            Toast.makeText(this, Html.fromHtml("<big><b>Develeped By S-Ka-Paid</b></big><br>© 2016 S-Ka-Paid"), Toast.LENGTH_LONG).show();
            bRet=true;
            break;
        case R.id.action_settings_4:
            Intent intent2 = new Intent(Intent.ACTION_VIEW);
            //Try Google play
            intent2.setData(Uri.parse("market://details?id=com.yesorno.app.yesorno"));
            startActivity(intent2);
            bRet=true;
            break;
        default:
            bRet=super.onOptionsItemSelected(item);
    }
    return bRet;
} }

基本上我的问题是,我如何才能将这两个代码正确地放在一起运作!这就是杀了我想弄清楚的事情。任何帮助都会非常感激!!!

2 个答案:

答案 0 :(得分:2)

  

我试图将所有(https://play.google.com/store/apps/details?id=)链接更改为html页面上的(market:// details?id =)链接

不要这样做。使用您开始使用的Google Play网址。

  

我注意到我当前的代码已经定义了一个setWebViewClient,所以我不确定我是否允许在同一个代码中有两个或者我想尝试将它与当前代码组合

你将它们结合起来。您创建一个WebViewClient来处理一个WebView的所有需求。这并不难:

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            // is this a play store URL?
            String partialUrl = "/store/apps/details?id=";
            if (url.contains(partialUrl)) {

                // extract the app id from the URL
                int pos = url.indexOf(partialUrl) + partialUrl.length();
                String appId = url.substring(pos);

                try {
                    // open the google play app
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("market://details?id=" + appId));
                    OtherApps.this.startActivity(intent);
                    return true;  // we overrode the url load

                } catch (ActivityNotFoundException e) {
                    // no google play app, load URL in device browser
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(url));
                    OtherApps.this.startActivity(intent);
                    return true;
                }
            }
            return false;  // no override, let the webview load this url
        }
    });

答案 1 :(得分:0)

任何寻找答案的人......这里是正确的代码

    webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        if (dialog.isShowing()) {
            dialog.dismiss();
        }
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        // is this a play store URL?
        String partialUrl = "/store/apps/details?id=";
        if (url.contains(partialUrl)) {

            // extract the app id from the URL
            int pos = url.indexOf(partialUrl) + partialUrl.length();
            String appId = url.substring(pos);

            try {
                // open the google play app
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("market://details?id=" + appId));
                OtherApps.this.startActivity(intent);
                return true;  // we overrode the url load

            } catch (ActivityNotFoundException e) {
                // no google play app, load URL in device browser
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                OtherApps.this.startActivity(intent);
                return true;
            }
        }
        return false;  // no override, let the webview load this url
    }
});