【问题标题】:Android studio: pause and resume session on webviewAndroid Studio:在 webview 上暂停和恢复会话
【发布时间】:2022-01-26 04:37:08
【问题描述】:

有没有办法让用户在重启后保持登录状态而不在本地保存用户名和密码?我只想在应用关闭时暂停会话,然后在打开时恢复。

都试过了:

    myWebView.getSettings().setDomStorageEnabled(true);
    myWebView.getSettings().setAppCacheEnabled(true);

还尝试了 CookieManager 并设法做我想做的事,但由于某种原因,它停止工作并在应用程序退出时继续注销用户(我还是新手,我不知道发生了什么,无法修复它) .所以我试图找到一种不同的方法来做到这一点。

我的 MainActivity.java:

public class MainActivity extends AppCompatActivity {

public DrawerLayout dLayout;
private WebView myWebView;
public ActionBarDrawerToggle actionBarDrawerToggle;

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTitle("Updates");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //CREATE A FOLDER
    File file = this.getBaseContext().getExternalFilesDir("downloads");
    if (!file.exists())
        file.mkdir();
    setNavigationDrawer(); // call method
    dLayout = findViewById(R.id.my_drawer_layout);
    actionBarDrawerToggle = new ActionBarDrawerToggle(this, dLayout, R.string.nav_open, R.string.nav_close);

    dLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

    // to make the Navigation drawer icon always appear on the action bar
    Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
    myWebView = findViewById(R.id.activity_main_webview);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.getSettings().setDomStorageEnabled(true);
    myWebView.getSettings().setAppCacheEnabled(true);
    myWebView.setWebChromeClient(new WebChromeClient());

    String url = "http://192.168.43.105/public_html/central/updates.php";
    myWebView.loadUrl(url);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView webView, int errorCode, String description, String failingUrl) {
            Toast.makeText(MainActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();

        }

        public void onPageFinished(WebView webView, String url) {
            CookieManager.getInstance().flush();
        }


    });
    myWebView.getSettings().setSupportZoom(true);
    myWebView.getSettings().setBuiltInZoomControls(true);
    myWebView.getSettings().setDisplayZoomControls(false);
    myWebView.getSettings().setUseWideViewPort(false);

}

【问题讨论】:

    标签: java android android-studio session webview


    【解决方案1】:

    这是我使用的工作代码。试试这些。

     /*Webview settings.*/
    

    公共静态字符串 DATABASES_SUB_FOLDER = "/databases";

        public void setWebSettings(WebSettings webSettings) {
            this.webSettings = webSettings;
            /*Accept Cookie*/
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                cookieManager.setAcceptThirdPartyCookies(webview, true);
            }
            final String filesDir = getFilesDir().getPath();
            final String databaseDir = filesDir.substring(0, filesDir.lastIndexOf("/")) + DATABASES_SUB_FOLDER;
    
            webSettings.setBuiltInZoomControls(true);
            webSettings.setDisplayZoomControls(false);
            webSettings.setJavaScriptEnabled(true);
            webSettings.setDomStorageEnabled(true);
            webSettings.setPluginState(WebSettings.PluginState.OFF);
            webSettings.setLoadWithOverviewMode(true);
            webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
            //   webSettings.setUseWideViewPort(true);
    //        webSettings.setUserAgentString("Mozilla/5.0 (Linux; Android 10; SM-G970F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3396.81 Mobile Safari/537.36");
            webSettings.setAllowFileAccess(true);
            webSettings.setAllowContentAccess(true);
            webSettings.supportZoom();
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                webSettings.setMediaPlaybackRequiresUserGesture(false);
            }
            webSettings.setGeolocationEnabled(true);
            webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
            webSettings.setDatabaseEnabled(true);
            webSettings.setAppCacheEnabled(true);
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    //        webSettings.setSupportMultipleWindows(true);
            webSettings.setSaveFormData(true);
            webSettings.setSavePassword(true);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
    
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                // chromium, enable hardware acceleration
                webview.setLayerType(View.LAYER_TYPE_HARDWARE, null);
            } else {
                // older android version, disable hardware acceleration
                webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
    
            /*acces file url*/
            if (Build.VERSION.SDK_INT >= 16) {
                webSettings.setAllowFileAccessFromFileURLs(true);
                webSettings.setAllowUniversalAccessFromFileURLs(true);
            }
    
            if (Build.VERSION.SDK_INT < 18) {
                webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
            }
    
            if (Build.VERSION.SDK_INT < 19) {
                webSettings.setDatabasePath(databaseDir);
            }
    
            if (Build.VERSION.SDK_INT >= 21) {
                CookieManager.getInstance().setAcceptThirdPartyCookies(webview, true);
            }
    
        }
    

    【讨论】:

      【解决方案2】:
          CookieManager.getInstance().setAcceptCookie(true);
      
          myWebView.setWebViewClient(new WebViewClient() {
      
              @Override
              public void onPageFinished(WebView view, String url) {
      
                  //Do you have cookies?
                  Log.d("logged", "url: " + url + ", cookies: " + CookieManager.getInstance().getCookie(url));
              }
      
          });
      
          String url = "http://192.168.43.105/public_html/central/updates.php";
          myWebView.loadUrl(url);
      

      终于成功了(同样,我可能不小心删除了一行)。我的网站在用户登录后创建了一个名为“logged”的 cookie,其中包含用户的姓名。在onCreate中添加代码。

      【讨论】:

        猜你喜欢
        • 2021-03-07
        • 1970-01-01
        • 2014-05-06
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        相关资源
        最近更新 更多