Как очистить файлы cookie и кеширование веб-браузера на Android, если вы не находитесь в веб-просмотре?
После того, как пользователь выйдет из моего приложения, я очищаю все, что ранее было кэшировано из веб-браузера, вызвав этот метод:
public void clearCookiesAndCache(Context context){
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(null);
}
else {
cookieManager.removeAllCookie();
}
}
CookieSyncManager отмечен как устаревший. CookieSyncManager.createInstance(контекст) необходимо вызвать, однако, если вы ранее не загружали веб-просмотр. Итак, как мы должны очищать файлы cookie и кеш без использования устаревшего CookieSyncManager в случаях, когда веб-просмотр, возможно, ранее не загружался?
Ответы
Ответ 1
Я использую следующий подход в своем приложении:
@SuppressWarnings("deprecation")
public static void clearCookies(Context context)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
Log.d(C.TAG, "Using clearCookies code for API >=" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();
} else
{
Log.d(C.TAG, "Using clearCookies code for API <" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
CookieSyncManager cookieSyncMngr=CookieSyncManager.createInstance(context);
cookieSyncMngr.startSync();
CookieManager cookieManager=CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.removeSessionCookie();
cookieSyncMngr.stopSync();
cookieSyncMngr.sync();
}
}
Я вызываю этот метод следующим образом из моего фрагмента:
mWebView.clearCache(true);
mWebView.clearHistory();
U.clearCookies(getActivity());
mWebView.loadUrl(authorizeURL);
Можно отправить файлы cookie для домена до и после вызова clearCookies
на
String yahooCookies = CookieManager.getInstance().getCookie("https://yahoo.com");
Log.d(C.TAG, "Cookies for yahoo.com:" + yahooCookies);
После вызова clearCookies
yahooCookies будет null
.
Эта реализация удовлетворяет мои потребности, я тестировал ее на нескольких эмуляторах и доисторическом Samsung Galaxy Gio с Android 2.3.3 и Nexus 5 с Android 5.1.1.
Ответ 2
Работа и тестирование.
android.webkit.CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(new ValueCallback<Boolean>() {
// a callback which is executed when the cookies have been removed
@Override
public void onReceiveValue(Boolean aBoolean) {
Log.d(TAG, "Cookie removed: " + aBoolean);
}
});
}
else cookieManager.removeAllCookie();
Ответ 3
Я использую это...
public static void clearCache() {
new WebView(getApplicationContext()).clearCache(true);
}
Будьте осторожны, чтобы вызвать его в потоке пользовательского интерфейса, иначе вы получите исключение.
Ответ 4
У меня была такая же проблема. Мне нужно было удалить все файлы cookie, потому что я не хотел сохранять старые и не хотел использовать устаревший метод.
Здесь документация:
http://developer.android.com/reference/android/webkit/CookieManager.html
И здесь метод:
public abstract void removeAllCookies (ValueCallback обратный вызов)
В вашем случае:
cookieManager.removeAllCookies(null);
должен выполнить эту работу. Если с "null" это не работает, вам необходимо использовать обратный вызов *...
В конце концов вы можете найти ответ здесь: Проблема с Android Cookie Android
Надеюсь, это поможет. Приветствия