Android 獲取手機儲存資訊詳解(記憶體,外存等)
final String mem_path = "/proc/meminfo";// 系統記憶體資訊檔案,第一行為記憶體大小 Reader reader = null; BufferedReader bufferedReader = null; reader = new FileReader(mem_path); bufferedReader = new BufferedReader(reader, 8192); long totalRAMSize = Long.parseLong(bufferedReader.readLine().split("\\s+")[1]) * 1024L;//這裡*1024是轉換為單位B(位元組)
而獲取記憶體可用大小有兩種方式,一是和上面一個有個MemFree的引數,顯示可用大小……而另一種方式則是直接使用android自帶的類,獲取當前的可用記憶體大小。 第一種方式和獲取總記憶體大小一樣,我就不寫了,第二種方式(關鍵程式碼):
<span style="white-space:pre"> </span>ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); //該介面可用獲取很多裝置資訊,這裡就不詳敘了== ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); am.getMemoryInfo(memInfo); long availRAMsize = memInfo.availMem;
至此,我們已經獲取到了手機記憶體總大小與可用記憶體大小 二、ROM內部儲存 ROM,RAM ==之前一直傻傻分不清楚。後來稍加記憶,ROM裡面的‘o’就是only 的意思,我就是理解為僅僅作為儲存所用,所以是內部儲存而不是記憶體==當然換個通俗易懂的方式,如果手機和電腦來比較的話,手機記憶體RAM,就是電腦的記憶體;手機內部儲存ROM就是電腦的C盤,而手機的SD卡內建儲存卡就對應電腦的D/E/F……盤 再次迴歸主題,要獲取內部儲存資訊大小,可以通過android自帶的類StatFs獲取磁碟的資訊。
<span style="white-space:pre"> </span>final StatFs statFs = new StatFs(Environment.getDataDirectory().getPath());//呼叫該類來獲取磁碟資訊(而getDataDirectory就是內部儲存)
long tcounts = statFs.getBlockCount();//總共的block數
long counts = statFs.getAvailableBlocks() ; //獲取可用的block數
long size = statFs.getBlockSize(); //每格所佔的大小,一般是4KB==
long availROMSize = counts * size;//可用內部儲存大小
long totalROMSize = tcounts *size; //內部儲存總大小
上面方法原理顯而易見了==我就懶得說了……下面的才是重頭戲 三、外接儲存資訊 所謂舉一反三,上面獲取ROM內部儲存資訊的時候,已經用到了獲取磁碟資訊類StatFs,當然儲存卡都算是磁碟的一種啦,我不信android裡面設定這個類沒有考慮到外接儲存卡! 果然,同意可以通過StatFs方式獲取:
final StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath());//呼叫該類來獲取磁碟資訊(而getExternalStorageDirectory就是外接儲存)
long tcounts = statFs.getBlockCount();//總共的block數
long counts = statFs.getAvailableBlocks() ; //獲取可用的block數
long size = statFs.getBlockSize(); //每格所佔的大小,一般是4KB==
long availROMSize = counts * size;//可用內部儲存大小
long totalROMSize = tcounts *size; //內部儲存總大小
……是的,我是無恥的複製貼上了ROM裡面的==||| 當然修改一個磁碟地址getExternalStorageDirectory(看命名就知道了--一個是getDataDirectory,內部儲存,一個是getExternalStorageDirectory,額外的儲存目錄……) 當初以為到這裡,大功告成…………然而,我還是太年輕 寫好程式碼之後,用自己爛爛的VIVO進行測試,插的是8G的卡發現,沒有任何問題,再找了一臺機器測試,16G的卡發現,顯示的是4G……看清楚--是4G。。。。 ……MADAN。。。這是什麼東西,我手機儲存卡明明是16G,結果顯示4G…… 繼續探究,觀察原始碼列印Environment.getExternalStorageDirectory().getPath()地址,發現出來的是scard0,--自己看手機的儲存卡地址,scard1,,,原來 android的官方文件上說,採用Enviroment.getExternalStorageDirectory()方法可以得到android裝置的外接儲存(即外插SDCARD),如果android裝置有外插SDCARD的話就返回外插SDCARD的根目錄路徑,如果android裝置沒有外插SDCARD的話就返回android裝置的內建SDCARD的路徑。這套方案很快就被否決了,因為Enviroment類的這個方法裡面的路徑也是寫死的,只有原生的android系統才使用這套方案,被更改過的anroid體統很多裝置的路徑都改了。 除此之外,呼叫Environment.getExternalStorageDirectory(),返回的儲存目錄並不是系統內建的SD卡目錄。
1.一部分手機將eMMC儲存掛載到 /mnt/external_sd 、/mnt/sdcard2 等節點,而將外接的SD卡掛載到Environment.getExternalStorageDirectory()這個結點。
此時,呼叫Environment.getExternalStorageDirectory(),則返回外接的SD的路徑。
2.而另一部分手機直接將eMMC儲存掛載在Environment.getExternalStorageDirectory()這個節點,而將真正的外接SD卡掛載到/mnt/external_sd、/mnt/sdcard2 等節點。 …………………………這樣這個方法就不科學了啊…………好在,還是有其他方法,通過讀取system/etc/vold.fstab檔案的內容來獲取儲存裝置路徑
相關推薦
Android 獲取手機儲存資訊詳解(記憶體,外存等)
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); //系統記憶體資訊 ActivityManager.MemoryInfo memInfo = new ActivityManager
Android 獲取手機儲存資訊詳解(記憶體,外存等)
android 獲取手機儲存資訊詳解(記憶體,外存等) android不像ios,android可以外接Sd卡,並且也會有內接的儲存卡,此次專門研究下如何獲取android的儲存資訊。 一、RAM記憶體 RAM,也就是我們常說的手機記憶體。最早的記憶體大小
Android熱修復技術原理詳解(最新最全版本)
總結 核心 桌面圖標 實時 開源 穩定性 安卓 定義 check 本文框架 什麽是熱修復? 熱修復框架分類 技術原理及特點 Tinker框架解析 各框架對比圖 總結 ??通過閱讀本文,你會對熱修復技術有更深的認知,本文會列出各類框架的優缺點以及技術原理,文章末尾簡單描述
mybatis的insert插入後獲取自增id詳解(從controller到mapper)
需求說明:當執行插入操作的時候,其中資料包含兩個模組,分別存放在兩種資料庫表中,拿表A,表B來說。 表A為基本資訊表,其中插入時候有自增id,也就是每新增一條資料後下一個id都會自動加1。 表B為詳情表,其中有個欄位為A_id與A表中的id是一樣的,也就是他們的關聯欄位。 那麼問
Android OTA升級包製作指令碼詳解(一,引數解析)
寫在前面: “build/tools/releasetools/ota_from_target_files -u lk.bin -n target.zip update.zip”這是製作整包的命令,很顯然這裡支援lk升級。本系列博文主要對該命令的執行流程及原理進
微信Android熱更新Tinker使用詳解(by 星空武哥)
Tinker是什麼 Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。當然,你也可以使用Tinker來更新你的外掛。 它主要包括以下幾個部分: gradle編譯外掛: tinker
Java 原子操作類詳解(AtomicInteger、AtomicIntegerArray等)
當程式更新一個變數時,如果多執行緒同時更新這個變數,可能得到期望之外的值,比如變數i=1,A執行緒更新i+1,B執行緒也更新i+1,經過兩個執行緒操作之後可能i不等於3,而是等於2。因為A和B執行緒在更新變數i的時候拿到的i都是1,這就是執行緒不安全的更新操作,通常我們會使
最新最詳細最簡潔Eclipse除錯PHP配置詳解(Xdebug,Zend Debugger)
轉自:http://lspvic.tk/2011/05/27/php-debug-config-in-eclipse-zend-xdebug/ 搬家注:該日誌寫於2011 年 04 月 07 日,Eclipse,PHP等版本號很多,更新也比較快,請注意文章中的版本。本文
JDK 原子操作類詳解(AtomicInteger、AtomicIntegerArray等)
當程式更新一個變數時,如果多執行緒同時更新這個變數,可能得到期望之外的值,比如變數i=1,A執行緒更新i+1,B執行緒也更新i+1,經過兩個執行緒操作之後可能i不等於3,而是等於2。因為A和B執行緒在更新變數i的時候拿到的i都是1,這就是執行緒不安全的更新操作,通常我們會使用
sensor 詳解(轉載,用以記錄)
mHandler = new Handler(looper) { @Override public void handleMessage(Message msg) { final Sen
Android獲取手機基站資訊並進行基站定位(基站定位原理)
http://blog.csdn.net/mad1989/article/details/9970431 一,首先普及一下手機基站資訊中相關的專業詞彙: 通過TelephonyManager 獲取lac:mcc:mnc:cell-id(基站資訊)的解釋: MCC,M
curl -l的資訊詳解(這樣還看不懂,就沒天理了)
[[email protected] ~]# curl -I "http://www.baidu.com" HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-reva
elasticsearch 索引儲存深入詳解(Elasticsearch教程03)|MVP講堂
作者:阿里雲MVP 銘毅 往期內容:死磕 Elasticsearch 方法論:普通程式設計師高效精進的 10 大狠招!Elasticsearch學習,請先看這一篇!(Elasticsearch教程01)Elasticsearch增、刪、改、查操作深入詳解(Elasticsearch教程02) 1、關於ES
Android 獲取手機儲存總大小,系統佔用空間
一、Android 儲存介紹及通常查詢大小 手機儲存有兩種,內建記憶體和外接記憶體(SD),目前可擴充套件記憶體的機型正在減少,大部分是內建儲存的手機,內建128G、256G已經很常見,但如果有擴充套件功能的話,買個乞丐版+SD卡也是美滋滋,畢竟廠家增加儲存空間後手機定價也不便宜。言
android-獲取手機小區資訊介面設計
1. manifests <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package
Android自定義主題樣式詳解(結合自定義title欄講解)
此篇部落格將總結主題樣式的自定義並且結合例項自定義title欄進行講解。為了方便閱讀,在此先寫明文章結構: 1.對android主題樣式的理解 (簡略結合系統自帶樣式的講解) 2.如何自定義主題樣式 (主要,有例子) 3.如何自定義titl
python爬蟲之requests庫詳解(一,如何通過requests來獲得頁面資訊)
前言: 爬蟲的基礎是與網頁建立聯絡,而我們可以通過get和post兩種方式來建立連線,而我們可以通過引入urllib庫[在python3的環境下匯入的是urllib;而python2的環境下是urllib和urllib2]或者requests庫來實現,從程式的複雜度和可讀性
Android 4.4 Graphic系統詳解(2) VSYNC的生成
VSYNC 的概念 VSYNC(Vertical Synchronization)是一個相當古老的概念,對於遊戲玩家,它有一個更加大名鼎鼎的中文名字—-垂直同步。 “垂直同步(vsync)”指的是顯示卡的輸出幀數和螢幕的垂直重新整理率相同,這完全是一個CRT顯
Android跨程序通訊AIDL詳解(附原始碼)
概述 AIDL:Android Interface Definition Language,即Android介面定義語言,記住,它是一門語言,設計它的目的就是為了實現跨程序通訊,我們知道Android的每一個程序都執行在獨立的記憶體中,程序之間程式碼是不能愉快
android開發 -- 檢視和陰影 詳解(Material Design)
Material Design包含了很多內容,大致把它分為四部分: 主題和佈局——ANDROID L——Material Design詳解(主題和佈局) 檢視和陰影——ANDROID L——Material Design詳解(檢視和陰影) UI控制元件——ANDROID