2012-02-23 73 views
3

我做這從服務器下載並存儲在使用MODE_WORLD_READABLE讀取pdf時出錯?

/data/data/<package_name>files 

使用此代碼的PDF的應用程序:

FileOutputStream fos = openFileOutput(pdfFileName, Context.MODE_WORLD_READABLE); 
fos.write(pdfAsBytes); 
fos.close(); 

但閱讀從中我已經有PDF閱讀器應用程序,這些文件時在設備上有時顯示黑屏,有時會顯示惱人的字體文件。我使用的代碼是:

File file = new File("/data/data/<package_Name>/files/pdffile"); 
Uri path = Uri.fromFile(file); 
Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
pdfIntent.setDataAndType(path, "application/pdf"); 
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
try 
{ 
    startActivity(pdfIntent); 
} 
catch(Exception e) 
{ 
    Log.e("Activity Not Found Exception",e.toString()); 
} 

我曾嘗試相同的代碼與其他路徑相同的文件(SD卡),他們工作得很好。 請幫助我,告訴我應該出現什麼問題。

什麼應該是一個可能的方法來糾正呢?

回答

0

您應該使用方法 android.content.Context.getFilesDir()

返回到在哪裏與openFileOutput(字符串,整數)創建的文件存儲在文件系統中的目錄的絕對路徑。

此代碼的工作對我來說:

File file = new File(this.getFilesDir(), pdfFileName); 
Uri path = Uri.fromFile(file); 
Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
pdfIntent.setDataAndType(path, "application/pdf"); 
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
try { 
    startActivity(pdfIntent); 
} catch(ActivityNotFoundException e) { 
    Log.e("Activity Not Found Exception",e.toString()); 
} 
0

只有2種方法來實現你想要的:


1)使用SD卡

您節省地方下載pdfSDCARD。事情是這樣的:

而不是創建一個文件:

File pdfFile = new File(Environment.getExternalStorageDirectory(), "pdffile"); 
FileOutputStream fos = new FileOutputStream(pdfFile); 
fos.write(pdfAsBytes); 
fos.close(); 
... 

並創建一個意圖,當您使用pdfFile


2)使用自定義ContentProvider

第二種方法可以使用,如果你還是不希望使用您的SD卡存儲。你可以使用你的應用程序的CacheDir(你將在那裏下載你的文件)。這涉及到創建您自己的ContentProvider,之後您將能夠將相應的URI傳遞給pdfreader應用程序。

有關如何做到這一點的詳細信息都是here


沒有已知的其他方法在Android中的第三方應用程序中打開任何已下載的文件。

+0

您的聲明不真實。確實,海報想要使用的方法*目前並未受到鼓勵*,並且一些應用程序甚至可能拒絕嘗試訪問此類路徑*,但這並不意味着Android會阻止它們這樣做*如果他們嘗試*。 – 2014-10-21 17:49:22