android檔案管理器開發中遇到的一些問題

2021-07-23 19:53:07 字數 2326 閱讀 1289

1.難點主要有如何獲取外掛程式裝置的資訊以及路徑無論是u盤還是tf卡等等

獲取方式在其他部落格中請自己檢視。

2.在android6.0中想要對外部裝置進行的檔案的操作是比較難的

因為6.0中android系統對外部儲存器操作的許可權進行了修改,所以只能進行讀操作,無法進行對外部裝置的寫操作,在翻看了大量的知識部落格中,找的了相關的解決方法

android 外部儲存許可權分析

不知道你有麼有發現,來自菜鳥的成長史:

kitkat之後的版本不再支援使用者對外置sdcard(secondary storage)的寫入等操作。如果使用者想要將檔案等copy到手機中,則只能

儲存到內部儲存器中,而無法儲存到外接sdcard中,而且無法建立新的資料夾,這樣一來給使用者和開發者都帶來了一定的不便。之所

以在kitkat之後版本中無法操作外接sdcard,是因為google更改了此模組的許可權,以前我們可以直接獲取write_external_storage

和read_external_storage許可權來直接操作sdcard,現在則不能,其目的是軟體解除安裝時能將該軟體建立的檔案全部刪除。據google

員工jeff sharkey(此模組的開發者)介紹,自kitkat之後anroid提供了新的api去訪問secondary external storage,但這不是本文重點,本

文重點是分析外部儲存許可權是如何作用的。

在kitkat之前的android版本會給應用程式單獨分出一塊外部儲存空間(external storage),這塊儲存空間可能在sdcard

(可插拔的外接sdcaard)上,也可能在僅僅是在裝置內部的快閃儲存器上,我們要獲得write_external_storage許可權在能對這塊

空間進行訪問,如果只是讀取內容則不需要許可權。在4.4 kitkat及之後的版本中,google做了兩個變化:1、進行讀取時需要

read_external_storage許可權;2、訪問應用所屬的目錄下(如:android/data/[package name])儲存的資料是不需要任

何許可權的。

kitkat中,外部儲存(external storage)被分割成了多個部分:乙個「primary」部分,乙個或多個「secondary」部分。在kitkat之前的

api 可以用來操作 primary external storage,secondary external storage 是對write許可權做了稍微修改,與上邊所述一樣,在應用所

所屬的目錄(如:android/data/[package name])下,對檔案是有所有操作許可權的,在應用所能管理到目錄之外,該應用則不具有寫

是它卻強制要求製造商對secondary external storage做了許可權限制。如果你對internal storage和external storage有疑問,可以看看文

檔  根據jeff sharkey 的介紹,當前版本的android系統,也就是kitkat,使用fuse (filesysgem in userspace ) 對external storage進

行管理。為了在檔案建立時獲取必要的許可權,動態地接受或拒絕來自使用者/組的個別請求,會有乙個android 守護程序參與與fuse 核心

驅動的互動。這僅僅是android在fat file system 格式化後的可移動卷上使用linux型許可權的一部分,在核心中它也允許使用超出基本的

owner/gouper/user 執行的多級許可權控制。看看下面jeff sharkey的解釋:

android:name="android.permission.write_external_storage"/>

可以讀寫sdcard,包括其他storage,比如內部flash,usb等等

4.0中如果只宣告這個,會發現其他mount的裝置有可能沒有寫許可權,需要同時宣告

這樣才可以讀寫/mnf/flash , /mnt/usb, /mnt/externa等目錄

可能4.0增加了對其他儲存裝置的內建支援,其他裝置不再共享gid "sdcard_rw"

而改用"media_rw",相應的細分了許可權宣告

2.3中 dr-xrwxr-x system   sdcard_rw          1969-12-31 16:00 flash

4.0中 d---rwxr-x system   media_rw           1970-01-01 08:00 flash

也就是說程式得有"android.permission.write_media_storage"許可權才可以寫入外部sd卡/u盤

解決方法:

編輯 system\etc\permissions\platform.xml 檔案(system資料夾必須是讀寫狀態,就是點一下r/w 目錄變成r/w),

此處:改為:

android檔案管理器模組開發,細節整理

intent intent new intent intent.action open document tree startactivityforresult intent,42 getcontentresolver takepersistableuripermission treeuri,int...

Android布局管理器

android中的布局包括 線性布局 布局 相對布局 幀布局和絕對布局 上面的 就是介面布局的xml語句 主要是調整位置 這個表示 相對布局 android layout width wrap content 按鈕大小適應字型大小 android layout height wrap content...

android 布局管理器

1.豐富的介面由很多控制項組成,讓控制項不亂,我們借助布局來實現.布局是一種可用於放置很多控制項的容器,它按照一定規律調整內部控制項的位置,編寫精美介面,布局內部放置控制項外,也可以放置布局,通過多層布局巢狀,我們完成一些複雜的介面實現.2.相對布局 relativelayout 和linearla...