Подтвердить что ты не робот

Как очистить файлы 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 в случаях, когда веб-просмотр, возможно, ранее не загружался?

4b9b3361

Ответ 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

Надеюсь, это поможет. Приветствия