我有一个网站,该网站通过webview加载到android应用程序中。无论何时启动应用程序,启动屏幕都会加载Web视图并显示登录页面(在Web视图中),该页面包含两个文本框,一个用于用户名,另一个用于密码。成功登录后,会话开始,网页加载良好。现在,我想从该登录页面(显示在webview中)获取登录信息(即用户名和密码)到我的android活动中。
获得此登录信息的原因:实际上,我想获取这些值,因为我还需要添加指纹身份验证选项以及用户名和密码。我想为用户提供两个选项,即使用用户名/密码或指纹登录。
我如何实现这种情况?有人告诉我,无法通过webview向用户提供这两种选择,因为只有本机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到活动获取信息。
JavaScriptInterface使用此界面,您可以在javascript和Android之间进行通信。
有关更多信息,例如,您可以visit它。