簡體   English   中英

從資產文件夾中使用其他應用程序打開pdf文件,解決方法

[英]Opening pdf with other app from assets folder, workarounds

在我的應用中,我的資產文件夾中存儲了一些pdf文件。 我見過用於打開pdf頁面的庫,但我認為Quickoffice之類的應用程序比我見過的庫更能顯示pdf。 因此,我希望使用Intent.ACTION_VIEW顯示pdf,如下所示:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);

但是,這是不可能的,因為不允許第三方應用訪問我程序包中的文件。 因此,我需要將文件復制到外部存儲中,然后將其提供給意圖。

這使我想到了一個問題:我的pdf很大,因此我認為將它們存儲兩次(一次在我的Assets文件夾中,一次在外部存儲器中)是愚蠢的。 所以我想知道是否有解決方法。 我可以例如這樣做:

//Copy file to external storage
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
//Delete file from external storage

這是一個好的解決方法,還是會導致pdf查看應用出現問題? 還是有其他解決方法?

因此,我需要將文件復制到外部存儲中,然后將其提供給意圖。

您還可以嘗試我的StreamProvider ,它是基於Google的FileProvider的罐裝ContentProvider ,可以從資產流式傳輸。

對於多個資產,這應該適用於StreamProvider XML元數據:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <asset
        name="whatevs"/>

</paths>

那應該將所有content://your.authority.name.goes.here/whatevs/* Uri值(用於*各種值)解析為assets/文件。 如果要將范圍限制為assets/ (例如, assets/goodstuff/ )的某些特定子目錄,則可以使用:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <asset
        name="whatevs"
        path="goodstuff/"/>

</paths>

並且,如果這不起作用,則應該隨便提出一個可復制的測試用例的問題

這是一個好的解決方法,還是會導致pdf查看應用出現問題?

startActivity()是異步的,因此外部PDF查看器將永遠無法以這種方式訪問​​文件。

暫無
暫無

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

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