La comunicación entre JavaScript y Android no funciona

Trato de que al momento de dar clic a un botón en una página de un WebView me mande una alerta con Android. Ya he intentado de todo y ni Android ni PHP me mandan ningún error.

Código Activity Principal:

this.webv = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webv.getSettings();
webv.getSettings().setJavaScriptEnabled(true);
webv.loadUrl("http://192.168.137.1/walletgo/");
webv.setWebViewClient(new WebViewClient());
webv.addJavascriptInterface(new WebAppInterface(this), "Android");

Código Webappinterface donde tengo el método que se ejecuta:

public class WebAppInterface
{
    Context context;

    public WebAppInterface(Context context) {
        this.context = context;
    }

    @JavascriptInterface
    public void showDialog(String message) {

        AlertDialog.Builder builder = new AlertDialog.Builder(this.context);
        builder.setMessage(message).setNeutralButton("OK",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
               dialog.dismiss();
                }
            }
        );
        builder.create().show();
    }
}

Botón en PHP:

<input type="button" value="Say hello!" onclick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
    function showAndroidToast(message){ Android.showDialog(message); }
</script>
3
задан 23.12.2016, 19:02
1 ответ

То, что ты стараешься реализовывать, является интерфейсом Javascript, чтобы JavascriptInterface тебе сообщает посредством Javascritpt с приложением...

Не делает вид то, что имеет какой-то проблемы создание интерфейса

this.webv = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webv.getSettings();
webv.getSettings().setJavaScriptEnabled(true); //Habilitar Javascript
webv.setWebViewClient(new WebViewClient());
webv.addJavascriptInterface(new WebAppInterface(this), "Android");
webv.loadUrl("http://192.168.137.1/walletgo/");

но метод showDialog() что назван с твоей страницы, верило в диалог, ты должен уверять, что контекст, который использует диалог, чтобы быть созданным, - диалог Activity, если он не появится. Если класс интерфейс объявлен в той же самой Activity, используй только this как контекст:

также добавь сообщение для того, чтобы ты проверил метод, он работает правильно.

  @JavascriptInterface
    public void showDialog(String message) {

        Log.i("showDialog", "El método se llama con el mensaje: " + message);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message).setNeutralButton("OK",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
               dialog.dismiss();
                }
            }
        );
        builder.create().show();
    }

Пример используя используя JavascriptInterface показывая, как реализовывать коммуникацию от веб-страницы до приложения android:

introducir la descripción de la imagen aquí

https://github.com/Jorgesys/Android-Javascriptinterface

1
ответ дан 24.11.2019, 11:53