旧api上的Android WebView同步cookie



我正在使用CookieSyncManager来同步cookie。我遵循了Android Documentation中的指南。在oncreate中创建实例,在onPause中停止同步,在onResume中恢复。另外,

CookieSyncManager.getInstance().sync();

onPageFinished.

由于API21我得到了一个弃用的警告,根据Android文档,我们应该使用

CookieManager.getInstance().flush();

现在才启动同步。

我已经试过了

if (android.os.Build.VERSION.SDK_INT >= 21) CookieManager.getInstance().flush();
else CookieSyncManager.getInstance().sync();

,但它给了我一个错误,API15作为最小值。

我不喜欢忽略弃用的想法,但是如何处理API15呢?

编辑:

来自评论(不确定我是否理解对了):

@Override
public void onPageFinished(WebView view, String url) {
  
  if (android.os.Build.VERSION.SDK_INT >= 21) flushCookies();
  else syncCookies();
}
@TargetApi(21) //add this
private void flushCookies() {
  CookieManager.getInstance().flush();
}
private void syncCookies() {
  CookieSyncManager.getInstance().sync();
}

解决lint提示我认为这是一个错误。

其实你可以用另一种方法:

@SuppressWarnings("deprecation")
public static void loadCookies() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
        CookieManager.getInstance().flush();
    } else {
        CookieSyncManager.getInstance().sync();
    }
}

在你的onPageFinished(WebView view, String url)中调用这个方法这段代码看起来干净多了,而且你不会看到你的方法看起来像被弃用了。

基于Selvin的评论:

@Override
public void onPageFinished(WebView view, String url) {
  if (android.os.Build.VERSION.SDK_INT >= 21) flushCookies();
  else CookieSyncManager.getInstance().sync();
}
@TargetApi(21)
private void flushCookies() {
  CookieManager.getInstance().flush();
}

做到了。再次感谢。

最新更新