我构建了一个密码管理应用程序。我将用户名和passowrd存储在数据库中。我想允许我的用户登录他们保存密码的网站 - 所以我使用webview。
但是,当我加载应用程序时,网站不记得我的密码,例如chrome保存您的用户名和密码并自动记住它们。
它看起来像我尝试登录的网站不记得我的凭据。
我找到了使用Google搜索API进行谷歌搜索的合适网站 - 它是动态搜索的,而非动态搜索。
我正在寻找一种自动填充密码的方法。
我该如何解决?
我的应用程序代码是这样的:
package com.example.tehem.webviewapp;
import android.net.http.SslError;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.HttpAuthHandler;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
public static final String username = "username" (read from database),
password = "password"(read from database),
address = "http://www.ebay.com/"(read from database, found from a search);
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
webView.setHttpAuthUsernamePassword(host, realm, username, password);
handler.proceed(username, password);
}
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}
});
webView.loadUrl(address);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
我的XML页面是这样编写的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<WebView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webView"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="181dp" />
</RelativeLayout>
当然,我允许在AndroidManifest.XML中使用互联网:
<uses-permission android:name="android.permission.INTERNET"/>
答案 0 :(得分:0)
我不是webview小部件的专家以及如何使用它,但我知道你需要保留cookie
根据documentation,我们将使用Cookie管理器来保存浏览器Cookie。
CookieSyncManager用于同步浏览器Cookie存储区 RAM和永久存储之间。为了获得最佳性能, 浏览器cookie保存在RAM中。一个单独的线程保存cookie 之间,由计时器驱动。
onCreate()
CookieSyncManager.createInstance(this);
onResume()
CookieSyncManager.getInstance().startSync();
onPause()
CookieSyncManager.getInstance().stopSync();
更新答案
当您定位Lollipop并且CookieSyncManager
已被弃用时,根据文档我们不再需要此方法,我们可以使用方法flush()直接CookieManager
要手动强制同步,您可以使用CookieManager方法flush() 这是sync()
的同步替代品
所以结果将是
if (android.os.Build.VERSION.SDK_INT >= 21) {
CookieManager.getInstance().flush();
}else {
// use old methods
}