rafinos Δημοσ. 27 Μαρτίου 2017 Δημοσ. 27 Μαρτίου 2017 Καλημέρα παιδιά και καλή εβδομάδα! Προσπαθώ από χθες να τρέξω 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(); } }); } }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα