簡體   English   中英

如何在Android中通過Intent打開Pdf查看器

[英]How to open Pdf viewer via Intent in Android

VB.NET/SQL Developer是Android開發的新手,但概念正在逐漸普及。

我已經設法實現DownloadManager來將URI中的PDF下載到DIRECTORY_DOWNLOADS文件夾,但是當我嘗試使用Intent打開時,系統僅提示我使用Dropbox和Word,而不是普通應用程序..代碼:

Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(Uri.parse(DIRECTORY_DOWNLOADS + File.separator + "WinLib" + File.separator + "WinLib.pdf"), "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);


try{
    startActivity(pdfIntent);
}catch(ActivityNotFoundException e) {
    Toast.makeText(MainActivity.this, "No Application available to view PDF", Toast.LENGTH_SHORT).show();
}

當我從“下載”文件夾中單擊文件時,會顯示驅動器PDF Viewer和OneDrive PDF Viewer的選項。

就像我說的那樣,我對Android / Java不熟悉,所以請不要太苛刻,但是任何幫助都將不勝感激,因為Google在此方面干dry了!

提前致謝

戴夫

用戶“ Shine”將我指向“ Martin Himmel” 帖子的方向。

我必須合並intent.setData和intent.setType,因為當我使用setType時,它將數據重置為null,因此找不到文件。

完成后,我得到了錯誤:

android.os.FileUriExposedException: file:///storage/emulated/0/Download/WinLib/WinLib.pdf exposed beyond app through ClipData.Item.getUri()

解決方案在“ eranda.del”的帖子中找到

所以我的最終代碼如下所示:

public String get_mime_type(String url) {
    String ext = MimeTypeMap.getFileExtensionFromUrl(url);
    String mime = null;
    if (ext != null) {
        mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
    }
    return mime;
}

public void open_file(String filename) {
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOWNLOADS), filename);

    Uri uri = Uri.fromFile(file);
    String mime = get_mime_type(uri.toString());

    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(uri, mime);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    this.startActivity(Intent.createChooser(intent, "Open file with"));
}

感謝Shine和其他幫助我完成此任務的貢獻者,非常感謝!

戴夫

您確定該Uri.parse(DIRECTORY_DOWNLOADS + File.separator + "WinLib" + File.separator + "WinLib.pdf")參數嗎? 我將嘗試使用類似於此處所述的方法來嘗試FileProvider.getUriForFile() 這樣,您就可以輕松地檢查通過以下方式傳遞給意圖的pdf的Uri和mime類型:

String mime = getContentResolver().getType(uri);

我還想象在您的情況下需要.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)調用,以便將讀取權限授予外部查看Intent。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM