Я использую Webview для загрузки файла .zip в свое приложение с сайта UIDAI.Но когда вызывается DownloadListener, он возвращает правильные данные, но загружает эту HTML-страницу в этот ZIP-файл вместо загрузки самого файла.тогда как, когда я пытаюсь загрузить тот же почтовый индекс через хром.Это загрузка правильного файла почтового индекса.Пожалуйста, помогите мне с этой проблемой.почему это происходит в веб-просмотре на этом конкретном веб-сайте (https://resident.uidai.gov.in/offline-kyc
), тогда как при использовании того же прослушивателя загрузки я могу загружать файлы на других веб-сайтах?
Мой код:
public class wvDownloadFile extends AppCompatActivity {
private static final int MY_PERMISSION_REQUEST_CODE = 123;
String QT_TAG = "download test";
String fileName = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = findViewById(R.id.web_view);
checkPermission();
String url = "https://resident.uidai.gov.in/offline-kyc";
wv.loadUrl(url);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setSupportMultipleWindows(true);
wv.getSettings().setAllowContentAccess(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
wv.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wv.getSettings().setBuiltInZoomControls(false);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setAllowContentAccess(true);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setAllowFileAccessFromFileURLs(true);
wv.getSettings().setAllowUniversalAccessFromFileURLs(true);
wv.getSettings().setDomStorageEnabled(true);
// userAgent: downloadlistener: Mozilla/5.0 (Linux; Android 7.1.2; Redmi Y1 Lite Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.132 Mobile Safari/537.36
// mimeType: application/zip
// contentLength: 5445
// contentDispostition: attachment; filename=offlineaadhaar20190925055612130.zip
// url: https://resident.uidai.gov.in/offline-kyc
wv.setWebViewClient(new WebViewClient() {
wv.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
fileName = URLUtil.guessFileName(url, contentDisposition, mimeType);
Log.i(QT_TAG, "downloadlistener0: " + userAgent +" " + mimeType+" " + contentLength + " " + contentDisposition+ " " + url);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setMimeType(mimeType);
//------------------------COOKIE!!------------------------
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader("cookie", cookies);
//------------------------COOKIE!!------------------------
request.addRequestHeader("User-Agent", userAgent);
request.setDescription("Downloading file...");
request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File0 ", Toast.LENGTH_LONG).show();
}
});
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i(QT_TAG, "listener overide url ");
view.loadUrl(url);
return true;
}
});
}
protected void checkPermission(){
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M){
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
// show an alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(wvDownloadFile.this);
builder.setMessage("Write external storage permission is required.");
builder.setTitle("Please grant permission");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ActivityCompat.requestPermissions(
wvDownloadFile.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSION_REQUEST_CODE
);
}
});
builder.setNeutralButton("Cancel",null);
AlertDialog dialog = builder.create();
dialog.show();
}else {
// Request permission
ActivityCompat.requestPermissions(
wvDownloadFile.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSION_REQUEST_CODE
);
}
}else {
// Permission already granted
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
switch(requestCode){
case MY_PERMISSION_REQUEST_CODE:{
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
// Permission granted
}else {
// Permission denied
}
}
}
}
}