ich Ihr Problem in 2 Teile brechen werde
1) Anzeige Dialog und denken sie daran, wenn der Benutzer gewählt hat, um es nicht wieder zu zeigen
Ein einfacher Alarmdialog mit gemeinsamen Einstellungen ca n mach das.
private void handleAlertDialog() {
//Handle showAlert
//check if allow to show dialog
if (!getSharedPreferences("MyPrefsFile1", MODE_PRIVATE)
.getBoolean("ShowDialog", false)) {
final CharSequence[] items = {"Would like to Remember this setting ? "};
AlertDialog dialog = new AlertDialog.Builder(WebViewActivity.this)
.setTitle("Allow location access")
.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
if (isChecked) {
//If the user checked the item, add it to the selected items
// Don't Allow, remember
getSharedPreferences("MyPrefsFile1", MODE_PRIVATE)
.edit()
.putBoolean("ShowDialog", true).commit();
Toast.makeText(getApplicationContext(), "Remember", Toast.LENGTH_SHORT).show();
} else {
getSharedPreferences("MyPrefsFile1", MODE_PRIVATE)
.edit()
.putBoolean("ShowDialog", false).commit();
Toast.makeText(getApplicationContext(), "Don't Remember", Toast.LENGTH_SHORT).show();
}
}
}).setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// Your code when user clicked on OK
// You can write the code to save the selected item here
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// Your code when user clicked on Cancel
}
}).create();
dialog.show();
}
}
2) Auslöser diese Methode aus JavaScript.
shouldOverrideUrlLoading(WebView view, String url)
ist veraltet nach Android N zeigen, dass Sie auch shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
überschreiben müssen.
Eine vollständige WebViewClient-Klasse wird wie folgt aussehen.
/**
* WebViewClient subclass loads all hyperlinks in the existing WebView
*/
public class GeoWebViewClient extends WebViewClient {
Dialog loadingDialog = new Dialog(WebViewActivity.this);
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
} else if (url.startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
} else if (url.startsWith("showalert:")) {
handleAlertDialog();
} else {
view.loadUrl(url);
}
return true;
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
if (uri.toString().startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, uri));
} else if (uri.toString().startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, uri));
} else if (uri.toString().startsWith("showalert:")) {
//Handle Alert
handleAlertDialog();
} else {
//Handle Web Urls
view.loadUrl(uri.toString());
}
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
webViewPreviousState = PAGE_STARTED;
if (loadingDialog == null || !loadingDialog.isShowing())
loadingDialog = ProgressDialog.show(WebViewActivity.this, "",
"Loading Please Wait", true, true,
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// do something
}
});
loadingDialog.setCancelable(false);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest request,
WebResourceError error) {
if (isConnected()) {
final Snackbar snackBar = Snackbar.make(rootView, "onReceivedError : " + error.getDescription(), Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Reload", new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("javascript:window.location.reload(true)");
}
});
snackBar.show();
} else {
final Snackbar snackBar = Snackbar.make(rootView, "No Internet Connection ", Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Enable Data", new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivityForResult(new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
webView.loadUrl("javascript:window.location.reload(true)");
snackBar.dismiss();
}
});
snackBar.show();
}
super.onReceivedError(view, request, error);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedHttpError(WebView view,
WebResourceRequest request, WebResourceResponse errorResponse) {
if (isConnected()) {
final Snackbar snackBar = Snackbar.make(rootView, "HttpError : " + errorResponse.getReasonPhrase(), Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Reload", new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("javascript:window.location.reload(true)");
}
});
snackBar.show();
} else {
final Snackbar snackBar = Snackbar.make(rootView, "No Internet Connection ", Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Enable Data", new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivityForResult(new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
webView.loadUrl("javascript:window.location.reload(true)");
snackBar.dismiss();
}
});
snackBar.show();
}
super.onReceivedHttpError(view, request, errorResponse);
}
@Override
public void onPageFinished(WebView view, String url) {
if (webViewPreviousState == PAGE_STARTED) {
if (null != loadingDialog) {
loadingDialog.dismiss();
loadingDialog = null;
}
}
}
}
isConnected
Methode wird verwendet, Netzwerkverbindung
/**
* Check if there is any connectivity
*
* @return is Device Connected
*/
public boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != cm) {
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isConnected());
}
return false;
}
zu überprüfen, wie Sie habe ich einen Filter sehen überprüfen URL mit showalert:
starten hinzugefügt. Wenn meine Webclient-Klasse eine URL abfängt, die mit showalert
beginnt, löst sie die Methode handleAlert
aus.
Ergebnis
2) Auslöser diese Methode aus JavaScript.
shouldOverrideUrlLoading(WebView view, String url)
ist veraltet nach Android N zeigen, dass Sie auch shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
überschreiben müssen.
Eine vollständige WebViewClient-Klasse wird wie folgt aussehen.
/**
* WebViewClient subclass loads all hyperlinks in the existing WebView
*/
public class GeoWebViewClient extends WebViewClient {
Dialog loadingDialog = new Dialog(WebViewActivity.this);
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
} else if (url.startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
} else if (url.startsWith("showalert:")) {
handleAlertDialog();
} else {
view.loadUrl(url);
}
return true;
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
if (uri.toString().startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, uri));
} else if (uri.toString().startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, uri));
} else if (uri.toString().startsWith("showalert:")) {
//Handle Alert
handleAlertDialog();
} else {
//Handle Web Urls
view.loadUrl(uri.toString());
}
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
webViewPreviousState = PAGE_STARTED;
if (loadingDialog == null || !loadingDialog.isShowing())
loadingDialog = ProgressDialog.show(WebViewActivity.this, "",
"Loading Please Wait", true, true,
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// do something
}
});
loadingDialog.setCancelable(false);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest request,
WebResourceError error) {
if (isConnected()) {
final Snackbar snackBar = Snackbar.make(rootView, "onReceivedError : " + error.getDescription(), Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Reload", new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("javascript:window.location.reload(true)");
}
});
snackBar.show();
} else {
final Snackbar snackBar = Snackbar.make(rootView, "No Internet Connection ", Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Enable Data", new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivityForResult(new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
webView.loadUrl("javascript:window.location.reload(true)");
snackBar.dismiss();
}
});
snackBar.show();
}
super.onReceivedError(view, request, error);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedHttpError(WebView view,
WebResourceRequest request, WebResourceResponse errorResponse) {
if (isConnected()) {
final Snackbar snackBar = Snackbar.make(rootView, "HttpError : " + errorResponse.getReasonPhrase(), Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Reload", new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("javascript:window.location.reload(true)");
}
});
snackBar.show();
} else {
final Snackbar snackBar = Snackbar.make(rootView, "No Internet Connection ", Snackbar.LENGTH_INDEFINITE);
snackBar.setAction("Enable Data", new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivityForResult(new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
webView.loadUrl("javascript:window.location.reload(true)");
snackBar.dismiss();
}
});
snackBar.show();
}
super.onReceivedHttpError(view, request, errorResponse);
}
@Override
public void onPageFinished(WebView view, String url) {
if (webViewPreviousState == PAGE_STARTED) {
if (null != loadingDialog) {
loadingDialog.dismiss();
loadingDialog = null;
}
}
}
}
isConnected
Methode wird verwendet, Netzwerkverbindung
/**
* Check if there is any connectivity
*
* @return is Device Connected
*/
public boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != cm) {
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isConnected());
}
return false;
}
zu überprüfen, wie Sie habe ich einen Filter sehen überprüfen URL mit showalert:
starten hinzugefügt. Wenn meine Webclient-Klasse eine URL abfängt, die mit showalert
beginnt, löst sie die Methode handleAlert
aus.
Ergebnis
Dank @HiteshSahu Herr, hier ist 'SharedPreferences Einstellungen verwenden = getSharedPreferences (PREFS_NAME, 0);' statt 'PreferenceManager' können Sie bitte Ihre Antwort mit meinem gemeinsamen aktualisieren Prefs Name, weil ich dies zu einigen der Aktivitäten in einer anderen Weise tatsächlich gegeben habe, muss es Datei in 'MyPrefsFile1.xml' in saredprefs speichern, aber jetzt speichert es als my.example.webv_prefernce.xml bitte helfen Sie mir auf ... Ihre Antwort funktioniert, aber ich muss den diff-Optionen den gleichen Wert zuweisen. Also habe ich hinzugefügt, wenn die falsche offene Aktivität mit der Warnung else open activ geöffnet wird ity .. aber benötigen gemeinsame Prefs-Datei –
aktualisierte Antwort. –