我有一个网站,它通过 webview 加载到 android 应用程序中。每当应用程序启动时,启动屏幕后将加载 Web View 并出现登录页面(在 Web View 中),该页面包含两个文本框,一个用于用户名,另一个用于密码。成功登录后, session 启动并且网页加载良好。 现在我想将登录信息(即用户名和密码)从该登录页面(显示在 web View 中)获取到我的 android Activity 中。
获取此登录信息的原因: 实际上,我想获取这些值,因为我需要添加指纹身份验证选项以及用户名和密码。我想为用户提供两个选项,即使用用户名/密码登录或使用指纹登录。
我怎样才能实现这种情况?据我所知,不可能通过 webview 向用户提供这两个选项,因为只有 native Android 应用程序才能实现这种情况。所以请指导我。
我尝试了很多解决方案,但都没有成功。
public class PrimeLedgeWeb extends AppCompatActivity {
WebView webView;
String imei,url;
boolean isConnected;
WP10ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prime_ledge_web);
webView=(WebView)findViewById(R.id.webViewPrime);
progressBar = (WP10ProgressBar) findViewById(R.id.wp7progressBar);
progressBar.showProgressBar();
webView.setWebViewClient(new CustomWebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
if (Connection.checkConnection(getApplicationContext()))
{
initGUI();
}
else {
Toast.makeText(PrimeLedgeWeb.this, "Make sure to connect to Internet before proceeding!", Toast.LENGTH_SHORT).show();
}
}
public void initGUI() {
TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions( this, new String[] { android.Manifest.permission.READ_PHONE_STATE }, 0);
}
else {
imei = TelephonyMgr.getDeviceId();
}
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
PrimeLedgeWeb.NetworkChangeReceiver receiver = new PrimeLedgeWeb.NetworkChangeReceiver();
registerReceiver(receiver, filter);
NetworkDetaction networkDetaction = new NetworkDetaction(this);
if (networkDetaction.isNetworkConnected()) {
final URLRequest urlRequest = new URLRequest(PrimeLedgeWeb.this);
if (urlRequest.url==null)
{
// url = "http://204.93.216.33/PrimeTex/";
url = "http://204.93.216.33/PrimeTex/Home/DeviceId?DevId=" + imei;
if (new NetworkDetaction(PrimeLedgeWeb.this).isNetworkConnected()) {
if (urlRequest.url == null) {
webView.loadUrl(url);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String Url) {
if (Url != url) {
webView.loadUrl(Url);
}
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
webView.setVisibility(webView.INVISIBLE);
}
@Override
public void onPageFinished(final WebView view, String Url) {
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.GONE);
// progressBar.hideProgressBar();
}
}, 1000);
webView.postDelayed(new Runnable() {
@Override
public void run() {
view.setVisibility(webView.VISIBLE);
}
}, 1000);
super.onPageFinished(view, Url);
if (!new NetworkDetaction(PrimeLedgeWeb.this).isNetworkConnected()) {
if (!Url.endsWith("loginui.aspx")) {
webView.setVisibility(View.GONE);
Toast.makeText(PrimeLedgeWeb.this, "Not connected to internet",
Toast.LENGTH_SHORT).show();
}
else
{
webView.setVisibility(View.GONE);
}
}
if (new NetworkDetaction(PrimeLedgeWeb.this).isNetworkConnected()) {
webView.postDelayed(new Runnable() {
@Override
public void run() {
webView.setVisibility(View.VISIBLE);
}
}, 1000);
}
}
});
}
}
}
}
else
{
Toast.makeText(this, "Check Network Connection", Toast.LENGTH_SHORT).show();
}
}
private class CustomWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView webview, String url, Bitmap favicon) {
// progressBar.showProgressBar();
// webview.setVisibility(webview.INVISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
//
// //progressBar.setVisibility(View.GONE);
// progressBar.hideProgressBar();
//
// view.setVisibility(webView.VISIBLE);
super.onPageFinished(view, url);
}
}
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
//Log.v(LOG_TAG, "Receieved notification about network status");
isNetworkAvailable(context);
}
public boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
isConnected = true;
if (isConnected) {
}
return true;
}
isConnected = false;
}
} else {
isConnected = false;
}
}
return isConnected;
}
}
}
最佳答案
是的,当然,你可以从javascript获取信息到activity。
JavaScriptInterface 使用此接口(interface),您可以在 javascript 和 Android 之间进行通信。
有关更多信息,例如您可以 visit它。
关于javascript - 是否可以将登录信息从 webview 传递到 android Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687707/