2013-08-30 50 views
0

Android新手,對使用PDF非常困難感到驚訝。我想我已經整合了將PDF傳遞給Adobe等應用程序的代碼,並且如果沒有安裝此類應用程序,則會返回錯誤。訪問PDF文件以傳遞給Adobe(Android)

但是,targetName給出的文件路徑似乎無效,無論我是否將target置於資產或res/raw中。我不關心文件在哪裏,只要應用程序可以讀取並傳遞它。

任何人都可以啓發我什麼伏都教儀式,我必須執行在Android中打開PDF?我想念iOS的PDFView。

public void openPdf(Context context, String targetName) { 

File target = new File(targetName); 

if (target.exists()) { 
Uri targetUri = Uri.fromFile(target); 
Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
pdfIntent.setDataAndType(targetUri, "application/pdf"); 
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

try{ 
context.startActivity(pdfIntent); 
} 
catch (ActivityNotFoundException e) { 
    Toast.makeText(this, "You must have a PDF reader installed to view this document.", Toast.LENGTH_SHORT).show(); 
} 
} 

else { 
    Toast.makeText(this, "Die App ist kaput.", Toast.LENGTH_SHORT).show(); 
} 

} 

回答

0

使用該意圖你需要存儲在SD卡上的所有你的PDF,然後給意圖的URI SD卡上的PDF格式。

例如:

Uri pdfUri = Uri.parse(pdfUriString); 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setDataAndType(pdfUri, "application/pdf"); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

如果你有你的PDF文件在您的項目資源文件夾

0

但是這是不行的,由目標名稱沒有給出文件路徑似乎工作,我是否把目標資產或資源/原材料。

正確。這相當於在沒有插入計算機的拇指驅動器上安裝PDF文件,然後抱怨說您對Windows中使用PDF的難度感到「非常驚訝」。

我不在乎文件在哪裏,只要應用程序可以讀取並傳遞它。

寫下它到external storage。或通過content://Uri複製到第三方應用程序internal storageuse FileProvider to serve it

+0

對不起,沒有要抱怨或冒犯的意思。如果不是存儲應用程序運行時要使用的東西,那麼'assets'或'res'的目的是什麼? –

+0

@ClaytonGeipel:資源和資產是應用程序在自己的過程中使用的東西。這可以直接通過自己的代碼(加上Android框架)或通過庫。但是,一旦涉及第三方應用*,通常您將不得不做更多的事情。這是因爲儘管資源和資產被其他應用程序(笨拙地)讀取,但很少有開發人員懶得編寫應用程序來實際讀取它們,而將其工作重點放在更常規的數據源上:文件,URL和「ContentProviders」。 – CommonsWare

+0

@ClaytonGeipel:資產甚至更糟,因爲沒有'Uri'語法可將第三方應用程序指向您的某個資產。你可能會發現一些PDF閱讀器可以直接讀取你的原始資源嗎?也許。但我懷疑任何流行的 - Adob​​e Reader,特別是,我確信沒有。因此,如果您要依賴第三方應用程序,您有責任以這些應用程序可能使用的方式提供數據。 – CommonsWare