2012-03-24 11 views
0

私はアプリ内でこれらのボタンを一度押すとアプリケーション内から.PDFファイルを開きます。Androidアプリ(ローカルに保存されている)の.PDFを開くについて

自分のファイルを/ res/rawディレクトリに保存しました。それらをfile1.PDF、file2.PDFなどと呼ぼう。

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.file1: 
    Log.i(TAG, "Button one pressed"); 
    openPDF(Uri.parse("android:resource://test.pdf.files/raw/res/file1.PDF")); 
     break; 
}} 

上記はonClickのコードです。 UnderneathはopenPDF関数のコードです。

public void openPDF(Uri url) 
{ 
    File file = new File(url.toString()); 
    Log.i(TAG, url.toString()); 
    if (file.exists()) 
    { 
     Log.i(TAG, "File exists"); 
     Intent intent = new Intent(); 
     intent.setAction(android.content.Intent.ACTION_VIEW); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.setDataAndType(Uri.fromFile(file), "application/pdf"); 
     try 
     { 
       getApplicationContext().startActivity(intent); 
     } 
     catch (ActivityNotFoundException e) 
     { 
      Log.e(TAG,"Activity not found exception"); 
     } 
    }else{ 
     Log.i(TAG,"404: File not found!"); 
    } 
} 

私の問題は次のとおりです。if(file.exists())チェックを通過することはできません。私は、ファイルファイルをUri、URI、Stringの両方に変換しようとしましたが、 "res/raw/file1.PDF"、 "raw/file.PDF"、 "test" .pdf.files/raw/res/file1.PDF "を参照してください。しかし、これらのケースのいずれにおいても、私が開くファイルを見つけることができません。なぜこれがうまくいかないのか誰にでも見られますか?

私はこれを何時間も修正しようとしていました。私がもし(file.exists())を乗り越えることはできません

答えて

0

もちろん

をご確認ください。 Uriはファイルを指していません。 Uriがリソースを指しています。リソースはファイルではありません。ファイルはリソースではありません。

あなたのリソースUriを使用してIntentstartActivity()を試してみてください。 PDF閲覧者がUriでの作業を拒否した場合は、ローカルの読み取り可能なファイル(例:外部ストレージ)にコピーし、Uri.fromFile()でコピーしてPDFビューアを起動する必要があります。

+0

ええ、私も今全く新しい方法を試しました。 uriで送信するのではなく、単純に1-4からintを送信します。そして、openPDFメソッドの中には、次のようなスイッチがあります。 switch(fileNumber){ case 1: ファイルfile = newファイル( "android:resource://test.file.pdf/res/raw/file1.PDF" ); 休憩。 .... } これは、最初の理由と同じ理由で機能しませんか?私はまだ私のファイルを見つけることができないので。 – Tom

+0

@TomErikHøvring:私の答えをもう一度読んでください。 **リソースはファイルではありません**。 – CommonsWare

+0

申し訳ありませんが、誤解されているはずです。私はUri中間部分を削除することで、ファイルを直接開くことができると考えました。 – Tom

関連する問題