Android開發——遍歷讀寫U盤、SD卡等外部存儲


1.首先需要得到掛載在手機上的有哪些盤符

        String[] result = null;
        StorageManager storageManager = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
        try {
            Method method = StorageManager.class.getMethod("getVolumePaths");
            method.setAccessible(true);
            try {
                result =(String[])method.invoke(storageManager);
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < result.length; i++) {
                System.out.println("path----> " + result[i]+"\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

這里需要用到一個被系統隱藏的方法,即StorageManager下的getVolumePaths()方法。具體通過反射得到。方法返回值為字符串數組,在我的真機上可以獲得三個盤符:sdcard0 sdcard1 usbdisk。


2.拿到上面的根目錄路徑之后,即可運用listFiles()方法遍歷所有的文件

        private void getAllFiles(File path){  
        File files[] = path.listFiles();  
        if(files != null){  
            for (File f : files){  
                if(f.isDirectory()){  
                    getAllFiles(f);  
                }else{  
                    System.out.println(f);  
                }  
            }  
        }  
    }  

這樣就完成了所有文件的遍歷,如果需要讀寫,通過指定路徑拿到File對象實例,再操作文件流即可。

這里需要說明的是,手機如果想讀寫USB,本身需要支持USB-OTG功能。該功能除了支持U盤,還支持外接鼠標,鍵盤,游戲手柄,移動硬盤(需要更大電壓)等。

從硬件上說,Android4.0或以上系統的智能手機芯片都支持USB-OTG了,如果不支持的話,可能是以下兩個原因。   

1、硬件上缺少5V升壓器,外接設備沒有電壓供應。 

2、硬件設備制造商為了省電考慮,從系統上屏蔽了USB-OTG功能。

解決系統屏蔽OTG問題,網上的方法是(沒有測試過):

1.ROOT后打開RE管理器,編輯system/etc/vold.fstab文件,在vold.fstab的末尾添加如下代碼
# usb otg diskdev_mount usbotg /mnt/usbotg auto /devices/platform/mt_usb /devices/platform/musbfsh_hdrc
2.修改保存,重啟手機


3. Android6.0親測利用反射獲取不到U盤的掛載路徑,Google了一下發現默認掛載在了/mnt/media_rw/<隨機的ID>

ADB Shell里可以正常訪問,需要Root權限。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM