2011-02-25 48 views
8

我正在編寫一個Android應用程序來在設備上顯示PDF文件。我需要使用Adobe Reader的最新版本代碼(35498)來顯示PDF文件。我使用代碼在屏幕上顯示文件列表。現在我需要調用Adobe閱讀器(並非安裝在設備上的任何其他pdf閱讀器)。我不知道我是如何編碼的。我是Android新手。任何幫助將不勝感激。從我的Android應用程序調用Adobe Reader

由於事先 納文

+3

任何需要Adobe Reader的原因? Android意圖系統的重點在於將該應用用於用戶選擇(並且可用)的PDF。 – EboMike 2011-02-25 04:08:31

+0

@EboMike - 帽子,因爲Adobe閱讀器是我在外觀和感覺方面看到的Android pdf查看器中最好的。而另一個重要的原因是它目前的版本不允許任何複製/粘貼/打印功能,我們不希望用戶複製文檔的內容。有沒有其他辦法可以保證文件的安全?正如我所說我是Android的新手,我說的可能是錯的。 – NavinC 2011-02-25 12:28:36

+1

沒關係。用戶需要決定他們認爲「最好」的讀者是否滿足他們的需求。此外,如果用戶沒有安裝特定的閱讀器,則您的方法將失敗。 – EboMike 2011-02-25 17:33:57

回答

10

試試下面的代碼

private void loadDocInReader(String doc) 
    throws ActivityNotFoundException, Exception { 

    try { 
       Intent intent = new Intent(); 

       intent.setPackage("com.adobe.reader"); 
       intent.setDataAndType(Uri.parse(doc), "application/pdf"); 

       startActivity(intent); 

    } catch (ActivityNotFoundException activityNotFoundException) { 
       activityNotFoundException.printStackTrace(); 

       throw activityNotFoundException; 
    } catch (Exception otherException) { 
       otherException.printStackTrace(); 

       throw otherException; 
    } 
} 
+1

很明顯,在現實生活中,你會想用一個對話框來代替catch()塊,說「你沒有安裝讀卡器」。除此之外,很好。 +1。 – EboMike 2011-02-25 04:18:17

+0

@EboMike:其實代碼應該是這樣的:) – Mudassir 2011-02-25 04:25:25

+0

代碼完成;) – Greenhorn 2011-02-25 04:26:57

10

我看到你要專門開闢的Adobe,但你可能要考慮這樣做的更多的Android樣的方式打開一個普通的意圖,並允許用戶選擇如何打開。供您參考,您會做與下面的代碼:

private void openFile(File f, String mimeType) 
{ 
    Intent viewIntent = new Intent(); 
    viewIntent.setAction(Intent.ACTION_VIEW); 
    viewIntent.setDataAndType(Uri.fromFile(file), mimeType); 
    // using the packagemanager to query is faster than trying startActivity 
    // and catching the activity not found exception, which causes a stack unwind. 
    List<ResolveInfo> resolved = getPackageManager().queryIntentActivities(viewIntent, 0); 
    if(resolved != null && resolved.size() > 0) 
    { 
     startActivity(viewIntent); 
    } 
    else 
    { 
     // notify the user they can't open it. 
    } 
} 

如果你真的需要專門使用這兩種精舍閱讀器,和一個特定的版本,你需要查詢它使用PackageManager.getPackageInfo(String, int)

6

爲如果您處於「在線模式」,這裏使用Google文檔是一個有趣的替代解決方案。

String myPDFURL = "http://{link of your pdf file}"; 

String link; 
try { 
    link = "http://docs.google.com/viewer?url=" 
    + URLEncoder.encode(myPDFURL, "UTF-8") 
    + "&embedded=true"; 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Uri uri = Uri.parse(link); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(intent); 
+0

它也可以用於ftp連接嗎? – 2015-04-23 15:19:24

2

這樣做,setDataAndType方法似乎無法正確識別PDF類型(如果通過URL使用)。

private static Intent newPDFLinkIntent(String url) { 
    Uri pdfURL = Uri.parse(url); 
    Intent pdfDownloadIntent = new Intent(Intent.ACTION_VIEW, pdfURL); 
    pdfDownloadIntent.setType("application/pdf"); 
    pdfDownloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    return pdfDownloadIntent ; 
} 

不幸的是,我使用的是沒有預料到下載和緩存在線內容的PDF應用程序(有的則要內存泄漏的錯誤,有些人會拒絕鏈接下載),所以你最終結束了一個調用意圖在通過通知鏈接打開下載的內容之前首先下載PDF。我最終使用了以下解決方案:

private static Intent newPDFLinkIntent(String url) { 
    Intent pdfDownloadIntent = null; 
    try { 
     pdfDownloadIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); 
     pdfDownloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    } catch (URISyntaxException e) { 
     Log.e("PDF Link Tag", e.getMessage()); 
    } 
    return pdfDownloadIntent; 
} 
相關問題