前提・実現したいこと
Onsen UI + angular4を使ってAndroidアプリを作成しております。
端末内のファイルリストを表示して、ファイルリストをタッチすると
タッチされたファイルを他のアプリ(例:AcrobatReaderやブラウザ)で
参照するようにしたいのですが、指定するパスが誤っているためか、アプリが立ち上がらず無反応の状態です。
該当のソースコード
let filePath: string = file:///storage/emulated/0/Folder01/PDF_sample.pdf; window.open(filePath, '_system', 'location=no');
「filePath」はcordova-plugin-fileを用いて、ファイルリストを作成して
リストより選択されたファイルのパスとなります。
window.openでPDFが参照できるアプリや、OSのアプリ選択ダイアログが
立ち上がる想定でしたが、エラーなども特に発生せず無反応といった状態です。
試したこと
始めはパスが通っていないためではと思い、FileReaderオブジェクトで
該当パスのデータ(ソースコードのfilePath)を読み込んで見たところ、
結果としてdata: URLが取得できたため、指定パスは問題がないかと考えておりました。
また「filePath」をfile://スキームからcontent://スキームのパスに直接書き換えたところ、OSのアプリ選択ダイアログが立ち上がり、アプリを選択すると選択したアプリでPDF_sample.pdfを参照することができました。
実際に指定したパスは以下の内容です。(xxxxは半角数値)
window.open("content://media/external/file/xxxx","_system","location=no");
可能であれば、TypeScript(もしくはJavascript)でfile://スキームからcontent://スキームへの変換を行い解決したいのですが、変換方法をご存知でしたらご教示いただけますでしょうか。
また、window.open以外で、file://スキームからアプリを起動してファイルを開く代替案等ご存知の方よろしくお願いします。
補足
参考になるかわかりませんが以下環境の情報等。
更新できない事情があり全体的に古い状態です。
その他必要な情報があれば追記いたします。
angular 4.4.3(core,forms,common等すべて)
ngx-onsenui 4.1.0
onsenui 2.2.6
viewportとSecurityPolicy
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
あなたの回答
tips
プレビュー