2011-11-08 5 views
4

私はこれをしばらくの間稼働させようとしています。私はAndroidからpdfsを開く方法についてここで他の質問を見てきました。そして、一般的な合意は私が以下に示すコードです。何か不足していますか?Android開設pdfが動作していません

try 
    { 
     Uri path = Uri.parse("android.resource://com.TeamGLaDOS.DayTradeSim/" + R.raw.teamdoc); 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(path, "application/pdf"); 
     this.startActivity(intent); 
    } 
    catch(ActivityNotFoundException e) 
    { 
     Toast.makeText(this, "No Application Available to view PDF",  Toast.LENGTH_SHORT).show(); 
    } 

編集:それは常にActivityNotFoundExceptionをスローし、トーストを示しています。

例外メッセージはこれです:私は、PDFアプリケーションインストール(Aldiko)を持っていると私は前にAldikoでPDFファイルを起動するために他のアプリを使用しました:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=android.resource://com.TeamGLaDOS.DayTradeSim/2130968576 typ=application/pdf } 

編集2。

+0

どうしたらうまくいかないのですか?エラーはありますか?エラーがある場合、あなたのlogcatは何を言いますか? –

+0

@KurtisNusbaum私は詳細を更新しました。 – xdumaine

+0

@KurtisNusbaumあなたの答えを削除してくれたことに感謝します。 – xdumaine

答えて

2

あなたのURIは生のリソースにIDでアクセスするために適切に構成されていますが、すべてのPDFリーダーがandroid.resource://データURIスキームでインテントを解決するわけではありません。 これは、ユーザーのデバイスにインストールされたPDF Readerアプリケーションの実装に多少依存しますが、多くの場合、あなたの意図に設定されているmimeType以上のものをチェックします。たとえば、Adobe Readerでは、file:// URI、content:// URI、または全くURIを持たない(mimeTypeだけの)インテントについては解決されますが、リソースを直接指すURIについては解決されません。

できるだけ普遍的であるためには、まずアセット/リソースから読み込むPDFファイルをファイルシステム(内部ストレージまたは外部ストレージにコピーしてください。ファイルが外部に作成されている限り違いはありません読める)。その後、URIを含むインテントをファイルインスタンスに渡すと、全体的にもっと良い運が得られるはずです。

Aldikoは、file://のURIと "application/pdf" mimeTypeのインテントにのみ応答し、Adobe Readerで解決されたその他のオプションはありません...あなたの勝者があります。

HTH

+0

これは問題を引き起こしていたようです。私はpdfを表示するために、別のルートに行くつもりだと思う。なぜなら、パッケージからデバイスにコピーするのは少しコストがかかるからだ。 (これは大きなpdfです)。ありがとう! – xdumaine

1

は、パケットマネージャーを照会してみてください。

PackageManager packageManager = getPackageManager(); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setType("application/pdf"); 

List list = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); 


if (list.size() > 0) { 
    intent.setDataAndType(path, "application/pdf"); 
    startActivity(intent); 
} 

これでpdfファイルを実行するために何かを見つけたかどうかをチェックします。

URIはうまく見えますが、PDFが見つからない場合はいつでもFileNotFoundExceptionをキャッチし、文字がない場合はパッケージ名をgetPackageName()に置き換えてください。

+0

興味深いことに、私がこれを行うとき、 'list'はサイズは1ですが、例外はスローされます。 – xdumaine

+0

私の答えを参照してください。これは、データURI(mimeTypeのみ)を持たないIntentを解決し、URI + mimeTypeを定義したIntentを解決すると、使用可能なアクティビティのセットが異なるためです。 – Devunwired

+0

リストにある項目をResolveInfoとしてキャストしてパッケージを取得できるはずですlist.get(0).resolvePackageNameを使用してアクティビティの名前を調べ、Aldikoを見つけられない可能性を除外します。 – Dororo

関連する問題