我的Android应用中有一个登录页面。我将在登录请求的响应中获得的访问令牌保存为共享的首选项,以后使用它在下一个活动的Web视图中加载URL。
网络视图的加载方式类似于下面的chrome客户端,可以选择照片。
private ValueCallback<Uri> mUploadMessage;
private Uri mCapturedImageURI = null;
private ValueCallback<Uri[]> mFilePathCallback;
private String mCameraPhotoPath;
private static final int INPUT_FILE_REQUEST_CODE = 1;
private static final int FILECHOOSER_RESULTCODE = 1;
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_web_view);
mWebView= (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setSaveFormData(true);
mWebView.getSettings().setAppCacheEnabled(true);
CookieSyncManager.createInstance(getContext());
CookieSyncManager.getInstance().startSync();
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
CookieManager.getInstance().setAcceptThirdPartyCookies(wv1, true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAllowContentAccess(true);
mWebView.getSettings().setUserAgentString("Android");
mWebView.getSettings().setDomStorageEnabled(true);
String access = Appcontrol.getInstance().loadPreferencesString("access_token");
final HashMap<String, String> map = new HashMap<String, String>();
map.put("Authorization", "Bearer " + access);
mWebView.loadUrl(constants.URL_GymAddWebview,map);
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// do your handling codes here, which url is the requested url
// probably you need to open that url rather than redirect:
if ( url.contains(".pdf")){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "application/pdf");
try{
view.getContext().startActivity(intent);
} catch (ActivityNotFoundException e) {
//user does not have a pdf viewer installed
}
} else {
mWebView.loadUrl(url,map);
}
return false; // then it is not handled by default action
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.e("error",description);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) { //show progressbar here
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
//hide progressbar here
}
});
mWebView.setWebChromeClient(new ChromeClient());
}
//上面的代码使用一个收集基本用户数据并单击按钮提交的表单来加载webview。我的问题是在表单中输入详细信息后单击提交按钮时,没有添加数据,而是在Webview中显示需要身份验证的登录页面。但是我已经用我的访问令牌覆盖了URL。提交按钮将调用POST类型的url来收集数据。其他URL是GET类型,并且可以与访问令牌进行相同类型的加载一起正常工作。如果我在普通的移动浏览器(例如chrome)或未经以下任何授权的网络视图中运行它们,则这些URL可以正常工作而没有任何错误。
mWebView.loadUrl(constants.URL_GymAddWebview);
//上面的行加载了登录页面,一旦我使用laravel界面从webview内部登录,我将获得添加表单,如果我提交详细信息,它将被添加。如果我使用访问令牌加载webview,则不会发生这种情况。有没有其他方法可以在Android Webview中使用访问令牌加载POST类型的URL?