質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

902閲覧

android版adobe acrobatにて、PDF表示時、コピーが作成されてしまう件について

t_kogure

総合スコア0

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/04/20 12:31

編集2022/01/12 10:55

前提・実現したいこと

android studioを利用し、PDFを表示するアプリを作成しています。
具体的には、作成アプリでPDFをサーバから取得し、adobe acrobat readerで表示しています。

アプリの固有の外部ストレージからURIを生成し、intentでACTION_VIEWを渡すことで、PDFを表示することはできました。
ただ実際は、指定したPDFをacrobat readerがローカルストレージに複製を保存し、それを表示しているようです。

PDFを端末に残したくありません。(自作アプリに落としたPDFは自分で消しています)
acrobat readerの内部にコピーを作成させず、表示だけするにはどうすればよいのでしょうか。

ご解答、よろしくお願いします。

発生している問題・エラーメッセージ

次善の方法としては、コピーされたPDFを削除することも考えています。 acrobat readerだと内部ストレージにコピーされてしまうので、難しいと思っています。 別のビューアで試してみたところ、やはりコピーはされるのですが、外部領域のようなので、こちらは自作アプリから削除できそうです。 (メインストレージ/ezPDFREADER/bookdata/library) ただ、file.existで存在チェック・WRITE_EXTERNAL_STORAGEを確認したうえで、deleteを投げているのですが、AccessDeniedExceptionが返ってきます。

該当のソースコード

//adobe acrobat readerに渡すintent File shareFile =new File("/storage/emulated/0/Android/data/(パッケージ名)/files/(mkdirしたフォルダ)/temp.pdf"); Uri shareUri =FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".FileProvider", shareFile); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(shareUri, "application/pdf"); // 別タスクとして実行 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //権限付与 intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); //acrobatを指定 intent.setPackage("com.adobe.reader"); startActivity(intent); //コピーされたPDFの削除 if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==PackageManager.PERMISSION_GRANTED) { }else { //ここは通らないので権限はあるはず int PER_REQ_CODE = 1001; String per_req[] = new String[0]; ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PER_REQ_CODE); } folderPath ="/storage/emulated/0/ezPDFReader/bookdata/library/temp.pdf"; File filedele = new File(folderPath); if(filedele.exists()) { try { //ここに入るので存在している Boolean fileio = filedele.canRead();//falseが返ってくる Boolean filecandele = filedele.delete();//falseが返ってくる java.nio.file.Files.delete(java.nio.file.Paths.get(folderPath)); } catch (Exception e){ e.printStackTrace(); //AccessDeniedExcptionが返ってくる }finally { } }

試したこと

intentのactionをVIEW以外にしてみました。
MAINやEDITだと開けましたが、やはりコピーされてしまいます。

補足情報(FW/ツールのバージョンなど)

・PDFを更新せずに何度もintentを投げてもコピーは作成されません。
タイムスタンプが変わると別ファイルと認識するのか、新規にコピーが作成されてしまいます。
その場合、android studioのログを見てみても、コピーされる場合・されない場合での違いが見つかりませんでした。

・コピーされる場所
ezPDFReader:ソースに記述
adobe acrobat reader:ユーザーデータ?
(アプリ情報-ストレージから確認。PDFの分だけ容量が増えるので。
/storage/emulated/0/Android/data/com.adobe.reader/files/ではないです。)

・adobe acrobat readerを立ち上げてPDFを開く場合
「ファイル-その他のファイルを参照」から開くと以下メッセージが表示され、コピーが作成されます。
「Adobe Acrobatによって自動的に文書のローカルコピーが作成されます」

PDFに何かステータスが付いているのかとも考えましたが、上記のように同じPDFでもオペレーションによりコピーされる場合があることから、intentの属性のような気もします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

おはようございます。
私もタブレットでURLを生成し、Wifiを介してサーバーからPDFデータを表示しています。
何人も同時に表示しますし、Adobe Acrobat以外を使用して表示している人もいます。
タブレットはLENOBOやHUAWEIの人もいますが、コピーはされず表示だけだと思います。
アプリを作成したとき、タブレットにファイルエクスプローラーアプリを入れて中身を見ましたが、コピーはなく、今確認してもありませんでした。
参考にはならないと思いますが、頑張ってください。

public void pdfOpener(String select_url){ try { Uri uri = Uri.parse(select_url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } catch (Exception e) { System.out.println(e); } }

投稿2021/04/21 00:30

senior_golfer

総合スコア264

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_kogure

2021/04/21 00:50

おはようございます。 ご回答ありがとうございます。 android版のadobe acrobat readerは、普通に使っていても勝手にコピーを作成する場合があるようで、ネットではいつの間にか内部ストレージが膨れ上がっていたという報告が、複数見つかりました。 先程、私もコードを追記したのですが、回答者様に載せていただいたコード同様、特に変わったことはしていないのですが。。。 参考にさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問