Web 上の PDF ファイルへのリンクを備えた小さな Android アプリを作成しました。問題は、リンクが適切なファイル サフィックスのない一般的なリンクであることです。ただし、ファイルを提供する Web サーバーは、適切なサフィックスを付けた実際のファイル名を送信し、Web ブラウザーに強制的にファイルを適切な名前で保存させます (ファイルのダウンロードでは非常に一般的な方法です)。これは FF や IE などのデスクトップ ブラウザでは正常に動作しますが、Android で VIEW Intent を開始すると、元のファイルの下でダウンロードが開始され、サフィックスがなく、どのプログラムにも関連付けられていないファイルが生成されます。
(Adobe Reader がインストールされていて、手動で名前を変更したダウンロード ファイルが正常に開きます)
例: " http://mysample.com/file/6dbfj73bdngdn3 " へのリンクは、ヘッダーによって "mysamplefile.pdf" に変更されます。
ダウンロードしたファイルのヘッダーを設定する、サーバー上の PHP スニペットを次に示します。
header("Expires: 0");
header("Pragma: public");
header("Cache-Control: private, must-revalidate, post-check=0, pre-check=0");
header("Content-length: 12345");
header("Content-type: application/force-download; filename=\"mysamplefile.pdf\"");
header("Content-type: application/octet-stream; filename=\"mysamplefile.pdf\"");
header("Content-type: application/download; filename=\"mysamplefile.pdf\"");
インテントを開くためにいくつかの方法を試しましたが、これが私の現在の方法です。MIME タイプを指定すると、ActivityNotFoundException が発生します。指定しないと、サフィックスなしの元のファイル名で上記のダウンロードが取得されます。
String url = "http://mysample.com/file/6dbfj73bdngdn3";
//Intent i = new Intent(Intent.ACTION_VIEW);
//i.setDataAndType(Uri.parse(url), "application/pdf");
Intent i = new Intent(Intent.ACTION_VIEW, URI.parse(url));