1. 程式人生 > >android7.0 SD Card 路徑獲取

android7.0 SD Card 路徑獲取

現在網上關於外接SD Card路徑的文章大多已經過時,現將相關介面/方法的使用和得到的實際路徑貼在下面,供大家參考之用,尤其要注意getExternalStorageDirectory不再是外接SD卡的路徑了,而是一個內建的虛擬SD卡,並且對於多使用者來講,後面帶一個數字來區分使用者路徑,主使用者id為0,相關說明見連結文件,另附一篇SD  mount的文章連結,雖然也算過時了,但框架和分析問題的思路還在。

log:

05-31 09:54:00.009 6445-6445/? D/MainActivity: getSdDirectory2  [email protected]
05-31 09:54:00.010 6445-6445/? D/MainActivity: getSdDirectory2  getVolumeList=public android.os.storage.StorageVolume[] android.os.storage.StorageManager.getVolumeList()
05-31 09:54:00.015 6445-6445/? D/MainActivity: getSdDirectory2  length=2
05-31 09:54:00.015 6445-6445/? D/MainActivity: getSdDirectory2 path=/storage/emulated/10  removable=false getState=mounted
05-31 09:54:00.015 6445-6445/? D/MainActivity: getSdDirectory2 path=/storage/56A1-9404  removable=true getState=mounted
05-31 09:54:00.028 6445-6445/? D/MainActivity: getExternalStorageDirectory =/storage/emulated/10
05-31 09:54:00.029 6445-6445/? D/MainActivity: getRootDirectory =/system

code:

             StorageVolume[] volumes = null;

             Object invokeVolumeList = null;

             Method getVolumeList= null;

              mStorageManager = (StorageManager)context.getSystemService(Context.STORAGE_SERVICE);

              try {

           Log.d(TAG, "getSdDirectory2  mStorageManager="+mStorageManager);


                getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
                Log.d(TAG, "getSdDirectory2  getVolumeList="+getVolumeList);

                  try

{

                   final Class<?>storageValumeClazz = Class.forName("android.os.storage.StorageVolume");

                   final MethodgetPath= storageValumeClazz.getMethod("getPath");

                   Method isRemovable = storageValumeClazz.getMethod("isRemovable");

                   Method mGetState = null

;

                   if (Build.VERSION.SDK_INT >Build.VERSION_CODES.KITKAT) {

                      try {

                           mGetState = storageValumeClazz.getMethod("getState");

                       } catch(NoSuchMethodException e) {

                           e.printStackTrace();

                       }

                   }

                      try {

                          invokeVolumeList= getVolumeList.invoke(mStorageManager);

                      }catch (Exception e) {

                            Log.e(TAG,"couldn't talkto volumes", e);

                       }

                       final int length = Array.getLength(invokeVolumeList);

                      Log.d(TAG,"getSdDirectory2 length="+length);

                      ArrayList<StorageBean> list = newArrayList<StorageBean>();

                      for(int i = 0; i<length ;i++) {

                          final Object storageValume= Array.get(invokeVolumeList, i);//

                         final String path =(String) getPath.invoke(storageValume);

                         final boolean removable =(Boolean) isRemovable.invoke(storageValume);

                         String state = null;

                         if (mGetState !=null) {

                             state = (String) mGetState.invoke(storageValume);

                         }

                        Log.d(TAG,"getSdDirectory2path="+path+"  removable="+removable+" getState="+state);

                      }

                  } catch (Exception e) {

                     Log.e(TAG,"couldn't talkto MountService", e);

                  }

              } catch(NoSuchMethodException e) {

                 e.printStackTrace();

              }

參考文章:

Android6.0如何判斷有無外接SD卡(TF卡),並讀寫

http://m.blog.csdn.net/article/details?id=52671938

掛載流程:

http://blog.csdn.net/fe421504975/article/details/8240190

相關推薦

android7.0 SD Card 路徑獲取

現在網上關於外接SD Card路徑的文章大多已經過時,現將相關介面/方法的使用和得到的實際路徑貼在下面,供大家參考之用,尤其要注意getExternalStorageDirectory不再是外接SD卡的路徑了,而是一個內建的虛擬SD卡,並且對於多使用者來講,後面帶一個數字來

Android7.0及以上 獲取uri真實路徑

背景:各大應用商店強制要求應用基於Android O(target 26)適配 無奈只能進行適配了。 嘗試過使用以下方法獲取真實路徑: String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaS

Android判斷是否存在外置SD卡(獲取手機所有存儲設備的路徑

SD卡獲取手機裏所有存儲設備盤符,首先需要得到掛載在手機上的有哪些盤符,這裏需要用到一個被系統隱藏的方法, 即StorageManager下的getVolumePaths()方法。具體通過反射得到。 方法返回值為字符串數組, getVolumeList返回所有相關信息 StorageVolume:

適合Android7.0以上(到9.0)系統,獲取 關於手機--狀態資訊 (如:MAC,IMEI,IMSI,ICCID)

這裡面也寫了獲取本機手機號碼的程式碼,但是測試之後發現只有華為nove3 才可以獲取到,不過其他一些重要的資訊都可以拿到,MAC,IMEI,IMSI,ICCID。 上程式碼吧 這是一些許可權 <uses-permission android:name=

android7.0 獲取uri

android7.0以後,使用Uri.fromFile會報FileUriExposedException異常,這是因為android7.0以後執行了更加嚴格的檔案管理,要解決這一錯誤需要使用7.0新新增的FileProvide類,FileProvider官方文件

Android拍照和從相簿獲取圖片(解決android7.0開啟相機崩潰的問題),同時也解決了拍完照後圖片方向不正的問題

再android7.0中相機操作需要動態申請許可權,在點選開啟相機按鈕時要先判斷許可權,沒有許可權要申請,有許可權再操作,同時在申請許可權的回撥方法中也要判斷是否有許可權,有許可權的話再呼叫開啟相機的方法 package test.img.com.myim

Android手機如何獲取手機記憶體路徑sd路徑

/**      * 獲取手機自身記憶體路徑      *       */public static String getPhoneCardPath(){return Environment.getDataDirectory().getPath();}/**     *

Android 6.0上sdcard和U盤路徑獲取和區分

/**      * 6.0獲取外接sdcard和U盤路徑,並區分      * @param mContext      * @param keyword  SD = "內部儲存"; EXT = "SD卡"; USB = "U盤"      * @return      */     public stat

SD路徑問題以及如何獲取SDCard 記憶體

 0、獲取sd卡路徑 方法一: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程式的圖片儲存路徑); //寫死絕對路徑,不贊成使用 方法二: public String getSDPath(){     

獲取手機SD路徑之爬坑解決方案

  android 系統是開源的,於是各種產商各種瞎改android系統 ,導致不同版本的手機的SD卡的路徑千奇百怪。三星,HTC…等比較特殊。有時候讓我們Android程式設計師感到很迷茫,不得不懷疑自己的人生。為什麼總是坑我們這些Android程式設計師?抱

關於Android7.0相機閃退以及相簿獲取不到圖片問題

文件說明:關於Android7.0及以上機型調取相機閃退情況處理。 現象:     因開發中遇到需要呼叫系統相機或相簿獲取圖片,於是也沒有多思考就使用相關指定的Action去調取相機或者相簿,在開始測試時未出現問題,直到這個APK包被裝到一箇中興手機(型號A2017)手機上

Java路徑獲取

pub 結果 main [] sta poi -m args ack package unit02; /** * * @time 2014年9月18日 下午10:29:48 * @porject ThinkingInJava * @author Kiwi

王立平--scard0與scard1分別指的是什麽?以及路徑獲取

water iss manage -m ref ima mark jsb java 一般是: scard0:指系統內部存儲 scard1:指外插的sd卡 也有特例。。 分別獲取路徑的方法: package com.main; import jav

Android7.0對dlopen的改變

tail 地址 npr and eof size strtok log brush 兩個內存段 在同一個進程空間中dlopen一個.so文件,理論上在內存中是同一片區域,但實際調試中發現Android7.0(read "/proc/self/maps")中,先後讀同一個.

通過網絡路徑獲取的圖片 btye 圖片流互轉

成功 圖片 rect formatter uid () 無效 data spa 樓主有一個需要用戶用的網站要上傳圖片,圖片不保存到網站,而是要專門存放到一個圖片服務器上面,於是需要通過byte的形式來傳輸 之前寫的一個本地圖片流轉於byte互轉 後來發現通過網絡路徑獲取的

appium_v1.4.16版本不適配android7.0系統,運行報錯“Attempt to re-install io.appium.settings without first uninstalling”

urn fail tin ins 找到 auto his ger 問題: 要解決的問題:appium在androidV7.0系統上運行時報錯 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a

mmc/eMMC/SD-card

單獨 技術 mod 系統 html flash http sed desc 轉自:http://blog.csdn.net/yazhouren/article/details/46643321 MMC(multiMedia card)是一種通信協議,支持兩種模式SPI和MM

Android7.0調用系統相機拍照、讀取系統相冊照片+CropImageView剪裁照片

alpha pri process 點擊事件 self tps 而在 center ase Android手機拍照、剪裁,並非那麽簡單 簡書地址:[我的簡書–T9的第三個三角] 前言 項目中,基本都有用戶自定義頭像或自定義背景的功能,實現方法一般都是調用

Android7.0打包安裝問題

信息 num .com print 應用 ima text ret pan 一.問題描述 Android 7.0 引入一項新的應用簽名方案 APK Signature Scheme v2,先使用APK Signature Scheme v2簽名打包,然後再使用python腳

appium在android7.0上無法啟動問題

ESS cep 升級 代碼 resp 部分 elf back file 前言 由於最近很多android手機升級到7.0系統了,有些小夥伴的appium版本用的還是1.4版本,在運行android7.0的app自動化時候遇到無法啟動問題:WebDriverException