2011-02-10 19 views
8

まず、申し訳ありませんが、私はそれを見つけることができません。私はリモートリソースからアプリケーション内のドキュメントをダウンロードしています。文書がダウンロードされたら、その文書をユーザー用に開く必要があります。私が知りたいのは、PdfやTiffを扱い、デフォルトのアプリケーションで起動するアプリケーションがあるかどうか調べる方法です。Android:保存したファイルを既定のアプリケーションで開きます

ありがとうございます。

Intent viewDoc = new Intent(Intent.ACTION_VIEW); 
viewDoc.setDataAndType(
    Uri.fromFile(getFileStreamPath("test.pdf")), 
    "application/pdf"); 

PackageManager pm = getPackageManager(); 
List<ResolveInfo> apps = 
    pm.queryIntentActivities(viewDoc, PackageManager.MATCH_DEFAULT_ONLY); 

if (apps.size() > 0) 
    startActivity(viewDoc); 

答えて

7

ステップ#1:ここ

編集

は、ソリューションの一部であり、あなたのダウンロードしたファイル(例えば、Uri.fromFile())にUriを提供するために、setDataAndType()を使用して、ACTION_VIEWIntentを作成し、コンテンツのMIMEタイプ(例えば、application/pdf

そこからは、次の2つのオプションがあります:

ステップ#2aを:そのIntentPackageManagerqueryIntentActivities()を使用します。長さゼロのリストが返された場合は、候補がないことを知っているので、ボタンやメニューの選択肢などを無効にすることができます。IntentstartActivity()を呼び出します。

または

ステップ#2bと:ちょうど、ユーザーがそれを見たいときstartActivity()を呼び出して、インストールされているいかなる対応アプリが存在しない場合に発生する例外をキャッチ。上記の#2aより簡単ですが、ユーザーフレンドリーではありません。

+0

私はファイルのバイト[]がある場合、このメソッドは、私はsaしたくない場合は動作しますそれをディスクに入れますか? –

+0

@Tom Fobear:他のアプリケーションが読むことができる場所にディスクに保存する以外に選択肢はありません。つまり、外部ストレージに格納するか、またはアプリケーションローカルファイルストアに 'MODE_WORLD_READABLE'ファイルとして格納するか、通常の(拒否)ファイルとしてアプリケーションローカルファイルストアに格納し、コンテンツプロバイダを使用しますそれを他のアプリで利用できるようにする。 – CommonsWare

+0

問題が発生しました。私のデバイスには、あなたのPackageManagerメソッドを使用して自分の意図をサポートしていると主張する複数のアプリがありました。ファイルが正しく保存されていることがわかりました。たとえば、Adobe Readerをダウンロードすると、自分の活動から起動したpdfを見ることができます。可能性のある選択肢をハードコーディングする以外に、良いアプリをチェックするより合法的な方法がありますか?ありがとうございました。 –

1

次のコードでは、ファイルのためにあなたに
書き込み 作成受話器に存在するデフォルトのアプリケーションを開くこと

File myFile = new File("your any type of file url"); 
FileOpen.openFile(mContext, myFile); 

コードメイン関数内のファイルのURLを取得するには、このコードを

コードを助けるかもしれません別のクラス

+0

私はそれが働いているかどうか私に知らせる...ありがとう –

関連する問題