Προς το περιεχόμενο

Εμφάνιση Native Dialog σε Webview


rafinos

Προτεινόμενες αναρτήσεις

Καλημέρα παιδιά και καλή εβδομάδα!

 

Προσπαθώ από χθες να τρέξω native dialog μέσω webview σε μια android εφαρμογή μου, αλλά δεν μπορώ να τα καταφέρω με τίποτα. 

 

Πιο συγκεκριμένα όταν πατιέται το native back button της συσκευής τρέχω μια συνάρτηση javascript και όλα δουλεύουν καλά, μέχρι τη στιγμή που έρχεται η ώρα να τρέξει μια συνάρτηση από ένα javascript interface που έχω δημιουργήσει και τότε crasharei το app. 

 

Παρακάτω ο κώδικας.

//το interface δηλωμένο στην onCreate
myWebView.addJavascriptInterface(new BackInterface(this), "nativeBack");

//αυτό συμβαίνει όταν πατάω το native back button
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            myWebView.loadUrl("javascript:back()");
            return true;
}


//Javascript interface που το καλώ μέσα από τη συνάρτηση back() μέσα στο webview
public class BackInterface{
        Context mContext;

        BackInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void exitApp() {
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    myWebView.pauseTimers();
                    AlertDialog alertbox = new AlertDialog.Builder(mContext)
                            .setMessage("Do you want to exit application?")
                            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    myWebView.clearHistory();
                                    myWebView.loadUrl("about:blank");
                                    finish();
                                }
                            })
                            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    myWebView.resumeTimers();
                                }
                            })
                            .setCancelable(false)
                            .show();
                }
            });
        }
    }


//Το κάλεσμα της συνάρτησης exitApp() μέσα στη συνάρτηση back() της javascript
nativeBack.exitApp();

Η λύση!

Δημιουργούσα νέο handler αντί να το τρέξω απευθείας από το webview.

//interface to change the behavior of native back button
    public class BackInterface{
        Context mContext;

        BackInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void exitApp() {
            myWebView.post(new Runnable() {
                @Override
                public void run() {
                    myWebView.pauseTimers();
                    AlertDialog alertbox = new AlertDialog.Builder(mContext)
                    .setMessage("Do you want to exit application?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            myWebView.clearHistory();
                            myWebView.loadUrl("about:blank");
                            finish();
                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            myWebView.resumeTimers();
                        }
                    })
                    .setCancelable(false)
                    .show();
                }
            });
        }
    }
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...