2011-08-28 26 views
0

在這個精美的過度複雜的框架中,人們究竟如何去做這麼簡單的事情?Android-在編譯時存儲大文件

是的我已閱讀關於Data Storage for Android的文檔,大約54.5次。但是我找不到任何文檔描述應該如何在編譯時將文件放置在外部存儲上的地方。

這是我想要做的:我想在我的應用程序中包含一對(大)(10-20mb)音頻文件。當然,我不希望這些存儲在內部存儲上,因爲它們太大了。因此,將它們放置在res/raw中不是一個選項(因爲如果我理解正確,res/raw中的內容將放置在手機的內部存儲器中,是否正確?)

該文檔僅說明「如果您想要在編譯時存儲靜態文件,請使用res/raw「。現在,如果Android足夠聰明,可以將這些文件全部放在外部存儲設備上,那麼我永遠都很棒。但不知何故,我對此表示懷疑。所有的幫助表示讚賞:) (很抱歉,如果它看起來像我有一個態度,我剛剛花了太多的時間在這麼簡單的東西)再次

謝謝:)

更新:我結束了下載來自應用程序的文件,而不是在安裝時包含它們。謝謝你們的幫助!

我在嘗試通過URL下載時遇到了問題,花了很多時間試圖使其工作,最終問題是因爲我沒有在android清單文件中聲明正確的權限!因此,任何人誰在尋找下載的東西,在他們的應用,不要忘記設置權限的Android清單,這裏有我需要的權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

將這些標籤

+0

你定位了什麼API級別? –

+0

API等級10 ... – Mnightmare

回答

0

開始上述如果您的大文件在APK中,那麼它們將存儲在APK存儲的任何位置 - 這可以是內部或外部的,而且看起來這不是您想要的。對於您來說,最可能的選擇似乎是將文件放在網站上,並且在第一次運行應用程序時,必須注意文件不存在並在安裝後檢索它們。

+0

啊,好的......感謝您的建議。你有關於如何檢測「首次運行」的提示嗎?或者我應該粗略地檢查文件是否每次都存在? – Mnightmare

+0

謝謝,看我的帖子,我最終做了什麼! – Mnightmare

+0

您已經解決了這個問題,但是爲了迴應您的問題,我會建議您檢查文件是否每次都存在 - 這樣做可以讓您處理用戶已將其外部存儲替換爲其他方法(如使用'SharedPrefs')不會。 – mah

0

你應該如何去把文件上的外部存儲在編譯時

我假設上面是一個錯字,你的意思是在安裝時

至於您的要求 - 指示Android應用程序管理器在安裝過程中將APK的不同部分解壓到不同的位置是不可能的。

除此之外,不能保證APK下載將轉到內部或外部存儲器(它將保留,除非另行刪除)。

甚至更​​進一步,即使設備具有外部存儲器,它也不能保證即使設備具有外部存儲器,也可以在安裝時提供或有足夠的可用空間。

在這一點上,我想知道大小爲10-20MB的音頻文件 - 無論是非常長(持續時間)還是以高比特率進行編碼。如果是後者,那麼這並沒有多大意義,因爲大多數移動設備的音頻再現效果相當差(相對來說)......只是有些想法可以仔細考慮。

我個人認爲,麻將的下載安裝後建議可能是一種更好的方法,但我對於外部存儲可用性的評論仍然適用。

+0

是的,他們很長。我已經設法降低了比特率,所以他們現在在4-5 mb ..仍然,包括其中幾個,你已經準備好了20-30 mbs,所以問題依然存在。 :) – Mnightmare

0

在Android上解決問題的正確方法是「不要將它們放在您的應用程序中」。只需從您的Web服務器首次啓動時(使用HTTP客戶端API)下載它們,或者如果這些文件將獨立於應用程序本身進行升級,請將它們準備爲單獨的「應用程序」,供用戶通過Market下載。

+0

感謝您的HTTP客戶端API提示,我一定會考慮它! – Mnightmare