Не удается загрузить веб-страницу на SD-карту android webview

У меня есть веб-просмотр в моем приложении, чтобы показать ссылку на facebook, теперь я хочу сохранить страницу в файл html и сохранить на SD-карте, когда в автономном режиме приложение загрузит эту страницу пользователю. Но я не могу его скачать? Не знаю почему. Я использую асинхронную задачу для загрузки и тоста по окончании, но ничего не показывает. Вот мой код:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById();

    if (isNetworkConnected()) {
        mWebView.clearCache(true);
        mWebView.setWebViewClient(new myWebViewClient());
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl(downloadUrl);

        new DownloadFile().execute();
    } else {
        mWebView.loadUrl(Environment.getExternalStorageDirectory().toString() +
                "/Android/data/hao.com.webviewdemo/" + "webpage.html");
    }
}

private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo() != null;
}

private class DownloadFile extends AsyncTask<String, Integer, String> {
    @Override
    protected String doInBackground(String... sUrl) {
        try {

            URL url = new URL(downloadUrl);
            URLConnection connection = url.openConnection();
            connection.connect();

            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().toString() +
                    "/Android/data/hao.com.webviewdemo/" + "webpage.html");

            byte data[] = new byte[1024];
            int count;
            try {
                while ((count = input.read(data)) != -1)
                    output.write(data, 0, count);
            } catch (IOException e) {
                e.printStackTrace();
            }

            output.flush();
            output.close();
            input.close();

            Toast.makeText(MainActivity.this, "File downloaded", Toast.LENGTH_SHORT).show();

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return null;
    }
}

мое разрешение в манифесте:

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

У вас есть разрешение на чтение данных с sd-карты?

bluetoothfx 26.09.2018 05:33

Я добавил разрешение в своем посте

Hào Nguyễn Minh Nhật 26.09.2018 05:45

Получили ли вы от него пользу? Или просто добавили?

bluetoothfx 26.09.2018 05:47

Также проверьте правильность пути к файлу и его обнаружение. Перепроверьте ссылку.

bluetoothfx 26.09.2018 05:49

Я добавил его в Manifest, путь просто скопирован из файлового проводника Devide

Hào Nguyễn Minh Nhật 26.09.2018 06:43
1
5
94
1

Ответы 1

Вы пробовали этот способ загрузки веб-страницы?

mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
            String contentDisposition, String mimetype,
            long contentLength) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    startActivity(i);
}
});

Надеюсь помочь вам

Другие вопросы по теме