文章出處

更新模塊的整體方案終于搞定了,包括launcher的自更新,以及framework,app等代碼的更新,均測試通過。

很激動地拿到ANDROID上去測試,一下就傻眼了。 在創建upd目錄的時候,就遇上了 Permission Denied
我勒個X,我有WRITE_EXTERNAL_STORAGE權限呀。
 
經過百度后發現,cocos2dx返回的是路徑為 /data/data/<package_name>/files
這是在內部存儲卡上的,而要想對這個進行操作, 只能是使用Context相關API了。
 
在我的更新方案中,我使用了lfs,這當然是不行了。
經過多番搜索,一個東西映入我眼簾
Context.getExternalFilesDir()
 
這個API將會返回  /mnt/sdcard/android/data/<package_name>/files 目錄
這個目錄與/data ...../files目錄一樣,會在程序刪除時被刪除。 這樣一來,你的數據將不會保存在玩家機器上了(其實,對于刪游戲的玩家,可以考慮留下點什么,哈哈)
 
修改方法很簡單,將Cocos2dxHelper.Java中的sFileDirectory賦值的那一行改為如下即可
Cocos2dxHelper.sFileDirectory = pContext.getExternalFilesDir(null).getAbsolutePath();
 
但這個路徑需要注意的是,它可以被用戶操作, 在APP信息里面, 清除數據就是清除的這個目錄下的東西。網上也有人建議換一個地方來保存,以避免這個情況。
 
同時,將數據寫在SD卡上,來帶的問題就是 用戶有沒有安裝SD卡
 
目前我的做法是,如果用戶沒有安裝SD卡,就提示他去安裝一個SD卡。
 
Context.getExternalFilesDir()取到的路徑,與通過Enviroment.getExternalStorage取到的目錄,再加上 /android/data/<package_name>/files的結果是一樣的。
因此,回到getExternalStorage這個地方來,這個函數的注釋說得很清楚了。
 
getExternalStorage返回的是 /mnt/sdcard/  這個路徑指向的是主SD卡。
 
像小米3,或者是一些其它ANDROID機器,你會發現,根本沒有機會讓你使用SD卡,你怎么辦呢?
答案是,你不需要怎么辦,因為你買的小米3 16G,這個16G,就是sd卡,而不是機身內部存儲。 
 
到此,可能你還是不放心,萬一真的有用戶沒有SD卡怎么辦呢。
我想的是彈一個提示,告訴用戶去買張SD卡吧,又不貴。 因為一個沒有SD卡的用戶,機身內部存儲卡估計也早滿了,能夠安裝你的游戲,已經算是擠得不能再擠了,何必為這點東西而大改你的設計。
 
如果想要做得好,也可以先判定是否有SD卡,如果沒有SD卡,則還是使用機身內存……。這要看如何取舍了。
 
BTW:在ANDROID上,判定SD卡剩余空間,也挺好弄的。 http://www.oschina.net/question/54100_33506?sort=time
PS:IOS還未測試

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()