工作中遇到一個問題,音樂播放器可以播放U盤裏面的歌曲,但是無法刪除(刪除不會報錯,但只是從播放列表中刪掉了,發現U盤裏面的文件還在)。
懷疑是權限的問題。
查看U盤的掛載目錄發現:
root@android:/ # ls -l /mnt/removable/
d---rwxr-x system media_rw 1970-01-01 08:00 sda1
掛載的目錄所屬用戶爲system,所屬組爲media_rw。就是說system用戶以及media_rw組內的用戶可以對sda1目錄進行讀寫操作,而其他用戶沒有寫操作。
再看music.apk的manifest.xml文件。其中有這麼一行:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
再看系統中platform.xml中對android.permission.WRITE_EXTERNAL_STORAGE的定義:
58 <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
59 <group gid="sdcard_rw" />
61 </permission>
說明music.apk擁有sdcard_rw組的權限,而U盤在所在的組確實media_rw的。所以沒有權限作刪除操作。
那麼現在有兩種方法解決這個問題。
1.修改platform.xml中對android.permission.WRITE_EXTERNAL_STORAGE的定義:如下:
58 <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
59 <group gid="sdcard_rw" />
60 <group gid="media_rw" />
61 </permission>
把music.apk也加入到media_rw組內,那麼就擁有對U盤的寫權限了。
2.修改U盤的所屬組爲sdcard_rw。
這個修改是在vold中在對U盤進行掛載時修改的,具體就不在詳細說明了,參考vold源碼。