Более 1 файл bundle.config xml или как указать новый каталог файла bundle.config

Открытие pdf-документа с использованием google docs - плохая идея с точки зрения пользовательского опыта. Это очень медленно и не реагирует.

Решение после API 21

Так как api 21, мы имеем PdfRenderer , который помогает преобразовать PDF в Bitmap. Я никогда не использовал его, но это кажется достаточно простым.

Решение для любого уровня api

Другое решение - загрузить PDF-файл и передать его через Intent в специальное PDF-приложение, которое будет выполнять работу с флагом. Быстрая и приятная работа с пользователем, особенно если эта функция не является центральной в вашем приложении.

Используйте этот код для загрузки и открытия PDF

public class PdfOpenHelper {

public static void openPdfFromUrl(final String pdfUrl, final Activity activity){
    Observable.fromCallable(new Callable() {
        @Override
        public File call() throws Exception {
            try{
                URL url = new URL(pdfUrl);
                URLConnection connection = url.openConnection();
                connection.connect();

                // download the file
                InputStream input = new BufferedInputStream(connection.getInputStream());
                File dir = new File(activity.getFilesDir(), "/shared_pdf");
                dir.mkdir();
                File file = new File(dir, "temp.pdf");
                OutputStream output = new FileOutputStream(file);

                byte data[] = new byte[1024];
                long total = 0;
                int count;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    output.write(data, 0, count);
                }

                output.flush();
                output.close();
                input.close();
                return file;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(File file) {
                    String authority = activity.getApplicationContext().getPackageName() + ".fileprovider";
                    Uri uriToFile = FileProvider.getUriForFile(activity, authority, file);

                    Intent shareIntent = new Intent(Intent.ACTION_VIEW);
                    shareIntent.setDataAndType(uriToFile, "application/pdf");
                    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    if (shareIntent.resolveActivity(activity.getPackageManager()) != null) {
                        activity.startActivity(shareIntent);
                    }
                }
            });
}

}

Для того, чтобы Intent работал, вам необходимо создать файл FileProvider предоставить разрешение получающему приложению открывать файл.

Вот как вы его реализуете: в вашем манифесте:

    

        

    

Наконец, создайте файл file_paths.xml в файле ресурсов



    

Hope это помогает =)

0
задан Mateusz Byra 13 July 2018 в 08:09
поделиться