日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

华为手机文件在内部存储路径_Android手机自带内部存储路径的获取

發(fā)布時(shí)間:2023/12/20 Android 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 华为手机文件在内部存储路径_Android手机自带内部存储路径的获取 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我有一臺(tái)中興的Android手機(jī),型號(hào)是 ZTE U930HD,手機(jī)沒(méi)有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名為Micro SD Card),但是機(jī)身自帶了一個(gè)內(nèi)置存儲(chǔ)卡(也就是eMMC存儲(chǔ),大小為2G)。

我把這個(gè)手機(jī)用數(shù)據(jù)線插到電腦上,也會(huì)看到盤(pán)符,通過(guò)安裝「R.E 管理器」等文件管理應(yīng)用,也可以管理文件,并且能看到該存儲(chǔ)的掛載目錄是:/mnt/sdcard2

但是,

我打印 Environment.getExternalStorageState(),卻返回 ”removed“;

這是怎么回事?明明手機(jī)本身帶著內(nèi)置SD卡,卻為何提示這么一個(gè)信息?

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

看起來(lái)可以解釋了,在我這個(gè)中興手機(jī)上,調(diào)用Environment.getExternalStorageDirectory(),返回的存儲(chǔ)目錄并不是系統(tǒng)內(nèi)置的SD卡目錄。

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

不同的設(shè)備上,調(diào)用getExternalStorageDirectory()返回值卻不一樣。查詢(xún)了Android的文檔,才找到原因,原來(lái)這個(gè)方法返回的是當(dāng)前設(shè)備廠商所認(rèn)為的“外部存儲(chǔ)”,有可能返回外置的SD卡目錄(Micro SD Card),也可能返回內(nèi)置的存儲(chǔ)目(eMMC)。

總結(jié)一下:

一部分手機(jī)將eMMC存儲(chǔ)掛載到 /mnt/external_sd 、/mnt/sdcard2 等節(jié)點(diǎn),而將外置的SD卡掛載到 Environment.getExternalStorageDirectory()這個(gè)結(jié)點(diǎn)。

此時(shí),調(diào)用Environment.getExternalStorageDirectory(),則返回外置的SD的路徑。

而另一部分手機(jī)直接將eMMC存儲(chǔ)掛載在Environment.getExternalStorageDirectory()這個(gè)節(jié)點(diǎn),而將真正的外置SD卡掛載到/mnt/external_sd、/mnt/sdcard2 等節(jié)點(diǎn)。

此時(shí),調(diào)用Environment.getExternalStorageDirectory(),則返回內(nèi)置的SD的路徑。

至此就能解釋為都是無(wú)外置SD卡的情況下,在中興手機(jī)上,調(diào)用

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

原因已經(jīng)知道了,可是如何在無(wú)外置SD卡的時(shí)候,獲取到這個(gè)內(nèi)置eMMC存儲(chǔ)的具體路徑呢?

比如,我這個(gè)中興手機(jī),既然使用 Environment.getExternalStorageDirectory() 獲取到的是外置SD卡路徑,但是我又沒(méi)有插入SD卡,這個(gè)時(shí)候我想使用內(nèi)置的eMMC存儲(chǔ)來(lái)存儲(chǔ)一些程序中用到的數(shù)據(jù),我怎么去獲取這個(gè)eMMC存儲(chǔ)的路徑呢?

答案是:通過(guò)掃描系統(tǒng)文件"system/etc/vold.fstab”來(lái)實(shí)現(xiàn)。

"system/etc/vold.fstab” 只是一個(gè)簡(jiǎn)單的配置文件,它描述了Android的掛載點(diǎn)信息。

我們可以遍歷這個(gè)文件來(lái)獲取所有的掛載點(diǎn):

/**

*?遍歷?"system/etc/vold.fstab”?文件,獲取全部的Android的掛載點(diǎn)信息

*

*?@return

*/

private?static?ArrayList?getDevMountList()?{

String[]?toSearch?=?FileUtils.readFile("/etc/vold.fstab").split("?");

ArrayList?out?=?new?ArrayList();

for?(int?i?=?0;?i?

if?(toSearch[i].contains("dev_mount"))?{

if?(new?File(toSearch[i?+?2]).exists())?{

out.add(toSearch[i?+?2]);

}

}

}

return?out;

}

之后,當(dāng) Environment.getExternalStorageState()返回“removed”的時(shí)候(即,當(dāng)沒(méi)有掛載外置SD卡的時(shí)候),通過(guò)getDevMountList()方法獲取一個(gè)list,這個(gè)list中可以進(jìn)行寫(xiě)操作的那個(gè)就是系統(tǒng)自帶的eMMC存儲(chǔ)目錄了。

判斷邏輯:

/**

*?獲取擴(kuò)展SD卡存儲(chǔ)目錄

*

*?如果有外接的SD卡,并且已掛載,則返回這個(gè)外置SD卡目錄

*?否則:返回內(nèi)置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?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;

}

總結(jié)

以上是生活随笔為你收集整理的华为手机文件在内部存储路径_Android手机自带内部存储路径的获取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。