欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程實現手機自帶內部存儲路徑的獲取方法

 更新時間:2015年11月12日 15:17:15   作者:Cundong  
這篇文章主要介紹了Android編程實現手機自帶內部存儲路徑的獲取方法,涉及Android針對掛載點信息的獲取技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了Android編程實現手機自帶內部存儲路徑的獲取方法。分享給大家供大家參考,具體如下:

我有一臺中興的Android手機,型號是 ZTE U930HD,手機沒有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名為Micro SD Card),但是機身自帶了一個內置存儲卡(也就是eMMC存儲,大小為2G)。

我把這個手機用數據線插到電腦上,也會看到盤符,通過安裝「R.E 管理器」等文件管理應用,也可以管理文件,并且能看到該存儲的掛載目錄是:/mnt/sdcard2

但是,我打印 Environment.getExternalStorageState(),卻返回 "removed";

這是怎么回事?明明手機本身帶著內置SD卡,卻為何提示這么一個信息?

我又試著去打印了Environment.getExternalStorageDirectory(),返回:"/mnt/sdcard"

看起來可以解釋了,在我這個中興手機上,調用Environment.getExternalStorageDirectory(),返回的存儲目錄并不是系統(tǒng)內置的SD卡目錄。

我又換了一個 Sony L39u,一個 MOTO G,調用Environment.getExternalStorageDirectory()返回的目錄就是系統(tǒng)內置的SD卡目錄。

不同的設備上,調用getExternalStorageDirectory()返回值卻不一樣。查詢了Android的文檔,才找到原因,原來這個方法返回的是當前設備廠商所認為的"外部存儲",有可能返回外置的SD卡目錄(Micro SD Card),也可能返回內置的存儲目(eMMC)。

總結一下:

一部分手機將eMMC存儲掛載到 /mnt/external_sd 、/mnt/sdcard2 等節(jié)點,而將外置的SD卡掛載到 Environment.getExternalStorageDirectory()這個結點。
此時,調用Environment.getExternalStorageDirectory(),則返回外置的SD的路徑。

而另一部分手機直接將eMMC存儲掛載在Environment.getExternalStorageDirectory()這個節(jié)點,而將真正的外置SD卡掛載到/mnt/external_sd、/mnt/sdcard2 等節(jié)點。
此時,調用Environment.getExternalStorageDirectory(),則返回內置的SD的路徑。

至此就能解釋為都是無外置SD卡的情況下,在中興手機上,調用

打印 Environment.getExternalStorageState(),卻返回 "removed",在索尼、MOTO G上就返回:"mounted"

原因已經知道了,可是如何在無外置SD卡的時候,獲取到這個內置eMMC存儲的具體路徑呢?

比如,我這個中興手機,既然使用 Environment.getExternalStorageDirectory() 獲取到的是外置SD卡路徑,但是我又沒有插入SD卡,這個時候我想使用內置的eMMC存儲來存儲一些程序中用到的數據,我怎么去獲取這個eMMC存儲的路徑呢?

答案是:通過掃描系統(tǒng)文件"system/etc/vold.fstab"來實現。

"system/etc/vold.fstab" 只是一個簡單的配置文件,它描述了Android的掛載點信息。
我們可以遍歷這個文件來獲取所有的掛載點:

/**
* 遍歷 "system/etc/vold.fstab" 文件,獲取全部的Android的掛載點信息
* 
* @return
*/
private static ArrayList<String> getDevMountList() {
  String[] toSearch = FileUtils.readFile("/etc/vold.fstab").split(" ");
  ArrayList<String> out = new ArrayList<String>();
  for (int i = 0; i < toSearch.length; i++) {
   if (toSearch[i].contains("dev_mount")) {
    if (new File(toSearch[i + 2]).exists()) {
     out.add(toSearch[i + 2]);
    }
   }
  }
  return out;
}

之后,當 Environment.getExternalStorageState()返回"removed"的時候(即,當沒有掛載外置SD卡的時候),通過getDevMountList()方法獲取一個list,這個list中可以進行寫操作的那個就是系統(tǒng)自帶的eMMC存儲目錄了。

判斷邏輯:

/**
* 獲取擴展SD卡存儲目錄
* 
* 如果有外接的SD卡,并且已掛載,則返回這個外置SD卡目錄
* 否則:返回內置SD卡目錄
* 
* @return
*/
public static String getExternalSdCardPath() {
  if (SDCardUtils.isMounted()) {
   File sdCardFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
   return sdCardFile.getAbsolutePath();
  }
  String path = null;
  File sdCardFile = null;
  ArrayList<String> devMountList = getDevMountList();
  for (String devMount : devMountList) {
   File file = new File(devMount);
   if (file.isDirectory() && file.canWrite()) {
    path = file.getAbsolutePath();
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());
    File testWritable = new File(path, "test_" + timeStamp);
    if (testWritable.mkdirs()) {
     testWritable.delete();
    } else {
     path = null;
    }
   }
  }
  if (path != null) {
   sdCardFile = new File(path);
   return sdCardFile.getAbsolutePath();
  }
  return null;
}

希望本文所述對大家Android程序設計有所幫助。

相關文章

  • Android UI組件Spinner下拉列表詳解

    Android UI組件Spinner下拉列表詳解

    這篇文章主要為大家詳細介紹了Android UI組件Spinner下拉列表的實現方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android?Spinner和GridView組件的使用示例

    Android?Spinner和GridView組件的使用示例

    Spinner其實是一個列表選擇框,不過Android的列表選擇框并不需要顯示下拉列表,而是相當于彈出一個菜單供用戶選擇,GridView是一個在二維可滾動的網格中展示內容的控件。網格中的內容通過使用adapter自動插入到布局中
    2022-03-03
  • Android編程實現ActionBar的home圖標動畫切換效果

    Android編程實現ActionBar的home圖標動畫切換效果

    這篇文章主要介紹了Android編程實現ActionBar的home圖標動畫切換效果,涉及Android布局、樣式、Activity及菜單相關操作技巧,需要的朋友可以參考下
    2017-01-01
  • 教你安裝配置Android Studio

    教你安裝配置Android Studio

    對于Android Studio相信大家都不陌生了,作為谷歌推出的安卓開發(fā)工具,做過java的同學應該都了解,下面我們就簡單介紹下這款工具的安裝預配置
    2015-12-12
  • Android懸浮窗屏蔽懸浮窗外部所有的點擊事件的實例代碼

    Android懸浮窗屏蔽懸浮窗外部所有的點擊事件的實例代碼

    這篇文章主要介紹了Android懸浮窗屏蔽懸浮窗外部所有的點擊事件實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Android內存優(yōu)化操作方法梳理總結

    Android內存優(yōu)化操作方法梳理總結

    這篇文章主要介紹了Android 內存優(yōu)化知識點梳理總結,Android 操作系統(tǒng)給每個進程都會分配指定額度的內存空間,App 使用內存來進行快速的文件訪問交互,長時間如此便需要優(yōu)化策略,文章分享優(yōu)化知識點總結,需要的朋友可以參考一下
    2022-11-11
  • 深入理解Android組件間通信機制對面向對象特性的影響詳解

    深入理解Android組件間通信機制對面向對象特性的影響詳解

    本篇文章是對Android組件間通信機制對面向對象特性的影響進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 正確在Flutter中添加webview實現詳解

    正確在Flutter中添加webview實現詳解

    這篇文章主要為大家介紹了正確在Flutter中添加webview實現詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Android控件實現圖片縮放功能

    Android控件實現圖片縮放功能

    這篇文章主要介紹了Android控件實現對圖片進行縮放功能的相關資料,需要的朋友可以參考下
    2018-01-01
  • Android中的Notification機制深入理解

    Android中的Notification機制深入理解

    這篇文章主要給大家介紹了關于Android中Notification機制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02

最新評論