次のように、APK のダウンロードを開始する PHP スクリプトにリダイレクトするボタンのあるページがあります ($androidPackage はファイル名で、$package は絶対パスを含みます)。
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.android.package-archive');
header('Content-Disposition: attachment; filename=' . $androidPackage);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($package));
ob_clean();
flush();
readfile($package);
exit;
このアプローチは、いくつかの Android デバイスの Chrome、すべての主要なデスクトップ ブラウザー、および一部の Android デバイスのストック ブラウザーで機能します。ただし、私の携帯電話 (HTC Rezound) と Galaxy Tab 2 のストック ブラウザーでは、ボタンを短く押してもダウンロードが機能しません。これらのデバイスの Chrome では機能しますが、ダウンロードは開始されません。ボタンを長押しし、表示されるコンテキスト メニューから [開く] を選択すると、ストック ブラウザから APK をダウンロードできます。ストックブラウザを短く押してもダウンロードが開始されない理由について何か考えはありますか?
編集:
このダウンロードへのリンクに使用されるボタンは iframe 内にあることに注意してください。代わりに、ドキュメントの読み込み時にスクリプトのソースを iframe に読み込む代わりに document.location.href = (スクリプト URL のダウンロード) を実行すると、ダウンロードは短押しで機能します。ストックブラウザがiframeを処理する方法と関係がありますか? ページとそれが指すスクリプトは同じドメインにあります。