Кнопки Android Webview Jquery datatables: экспорт pdf становится файлом bin

#android #jquery #datatables

#Android #jquery #таблицы данных

Вопрос:

Я столкнулся с проблемой с моим приложением webview. У меня есть веб-приложение, которое использует таблицы данных jQuery с плагином buttons (как видно из изображения ниже)

введите описание изображения здесь

Я использую это веб-приложение в своем приложении webview. когда я нажимаю кнопку «PDF». Он должен загрузить файл pdf, содержащий данные в таблице. Но происходит то, что он загружает файл «.bin» вместо файла «pdf».

Это разрешения, установленные в моем AndroidManifest.xml

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
 

И это код для моего приложения webview в MainActivity.java

 public class MainActivity extends AppCompatActivity {
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    web = findViewById(R.id.webView);
    WebSettings webSettings = web.getSettings();

    webSettings.setJavaScriptEnabled(true);
    web.setWebViewClient(new Callback());

    web.loadUrl("http://webview.web-app.cf/");
    web.setDownloadListener(new DownloadListener() {
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
            try {
                DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://webview.web-app.cf/"));
                request.setMimeType(mimetype);
                String cookies = CookieManager.getInstance().getCookie("http://webview.web-app.cf/");
                request.addRequestHeader("cookie",cookies);
                request.addRequestHeader("User-agent",userAgent);
                request.setDescription("Downloading File . . .");
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION);
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName("http://webview.web-app.cf/",null,null));
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Toast.makeText(getApplicationContext(),"Downloading File",Toast.LENGTH_LONG).show();
            }catch (Exception e){
                if (ContextCompat.checkSelfPermission(MainActivity.this,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
                    
                    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                            android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                        Toast.makeText(getBaseContext(), "To download attachments, Please tap allow when prompted", Toast.LENGTH_LONG).show();
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                110);
                    } else {
                        Toast.makeText(getBaseContext(), "To download attachments, Please tap allow when prompted", Toast.LENGTH_LONG).show();
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                110);
                    }
                }
            }
        }
    });
}

private class Callback extends WebViewClient {
    @Override

    public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event){
        return false;
    }
  }
}
 

Я не очень хорошо знаком с Java, поэтому я не уверен, чего не хватает в моем коде для достижения моей цели.

Заранее спасибо за помощь.