2010-11-08 105 views
3

爲了引導我的問題,請注意幾件事。在這種情況下,我不想將所述文件存儲在SD卡上。該文件也不能直接存儲在應用程序本地文件目錄中。它需要位於子目錄中,因此它不能使用openFileOutput()和MODE_WORLD_READABLE寫入文件。如何通過意向在另一個應用程序中打開本地應用程序文件?

該應用程序可能會下載文件的小文件,如PDF格式,並將它們本地存儲在一個子目錄中。我希望能夠讓用戶打開這些文件,如果他們有一個可以打開它們的應用程序。

例如這裏是發送PDF的意圖:

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(path), "application/pdf"); 
startActivity(intent); 

路徑是這樣的:/data/data/packagename/files/subdir/example.pdf

這一意圖將開啓pdf查看器,但查看器無法打開文件。我認爲這是一個權限問題。我在這裏嘗試Mark Murphy的建議:使用Runtime.getRuntime().exec("chmod 755 " + fileName);http://groups.google.com/group/android-developers/browse_thread/thread/4e55d869213483a9/b7270078ac1a2744?lnk=raot,但沒有任何區別。他還建議了一個內容提供者,但是如果可以的話,我想避免它,因爲將這個文件轉換爲另一個應用程序看起來很像。

如果內容提供者是唯一的選擇,我是否必須將文件保存到內容提供者,或者我可以只使用內容提供者作爲傳遞來在需要時將其傳遞給其他應用程序?

謝謝,讓我知道如果我不清楚。

+0

其他活動無權訪問您的文件。如果你需要他們,你必須將他們保存到SD卡或使用內容提供商。 – Falmarri 2010-11-08 03:41:13

回答

1

我也嘗試了所有您提到的選項(以及更多),而內容提供商是唯一對我有用的方法。我並不完全確定「將文件保存到內容提供者」的意思,但實際上在數據庫中並不需要任何提供者將文件提供給其他應用程序的任何內容。

0

你可能想看看android:sharedUserId清單屬性:

,將與其他 應用程序共享一個Linux用戶ID的名稱。默認情況下,Android會爲每個應用程序分配自己的 唯一用戶標識。但是,如果對於兩個或更多應用程序將此屬性設置爲相同的值 ,則它們將共享相同的ID - ,前提是它們也由相同的證書籤名。 具有相同用戶標識的應用程序可以訪問彼此的數據,並且如果需要,可以在相同的過程中運行。

請注意,您的應用程序已經有一個您無法確定的默認應用程序(AFAIK)。也可以爲兩個應用程序定義相同的sharedUserId,然後將它們安裝在新的模擬器上。

第二點,你確定你能看到PDF文件嗎?我認爲Android還沒有支持它。

+0

我會看看,但我不確定是否要將整個應用打開到另一個應用。有些應用程序可以打開PDF文件,它會在嘗試之前檢查是否有應用程序。 – cottonBallPaws 2010-11-08 22:18:44

相關問題