Android开发之系统信息【4】——获取Android已安装程序列表
更新时间:2023-04-27 16:07:01 阅读量: 实用文档 文档下载
Android开发之系统信息【2】——获取Android手机内存信息
Android开发之系统信息【2】——获取Android手机内存信息
在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?通过读取文件”/proc/meminfo”的信息能够获取手机Memory的总量,而通过
ActivityManager.getMemoryInfo(ActivityManager.MemoryInfo)方法可以获取当前的可用Memory量。
“/proc/meminfo”文件记录了android手机的一些内存信息,在命令行窗口里输入”adb shell”,进入shell环境,输入”cat/proc/meminfo”即可在命令行里显示meminfo文件的内容,具体如下所示。
C:\Users\Figo>adb shell
# cat /proc/meminfo
cat /proc/meminfo
MemTotal: 94096 kB
MemFree: 1684 kB
Buffers: 16 kB
Cached: 27160 kB
SwapCached: 0 kB
Active: 35392 kB
Inactive: 44180 kB
Active(anon): 26540 kB
Inactive(anon): 28244 kB
Active(file): 8852 kB
Inactive(file): 15936 kB
Unevictable: 280 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 52688 kB
Mapped: 17960 kB
Slab: 3816 kB
SReclaimable: 936 kB
SUnreclaim: 2880 kB
PageTables: 5260 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 47048 kB
Committed_AS: 1483784 kB
VmallocTotal: 876544 kB
VmallocUsed: 15456 kB
VmallocChunk: 829444 kB
#
下面先对”/proc/meminfo”文件里列出的字段进行粗略解释:
MemTotal: 所有可用RAM大小。
MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。
Buffers: 用来给文件做缓冲大小。
Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。
SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小。已经被交换出来的内存,仍然被存放在swapfile中,用来在需要的时候很快的被替换而不需要再次打开I/O端口。
Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。
Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。
SwapTotal: 交换空间的总大小。
SwapFree: 未被使用交换空间的大小。
Dirty: 等待被写回到磁盘的内存大小。
Writeback: 正在被写回到磁盘的内存大小。
AnonPages:未映射页的内存大小。
Mapped: 设备和文件等映射的大小。
Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
SReclaimable:可收回Slab的大小。
SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。
PageTables:管理内存分页页面的索引表的大小。
NFS_Unstable:不稳定页表的大小。
要获取android手机总内存大小,只需读取”/proc/meminfo”文件的第1行,并进行简单的字符串处理即可。
JAVA代码如下:
package com.figo.readsyememory;
import android.app.Activity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.content.Context;
import android.text.format.Formatter;
import android.util.Log;
import android.widget.TextView;
public class ReadSystemMemory extends Activity {
TextView tv = null;
private String getAvailMemory() {// 获取android当前可用内存大小
ActivityManager am = (ActivityManager)
getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);//mi.availMem; 当前系统的可用内存
return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 将获取的内存大小规格化
}
private String getTotalMemory() {
String str1 = "/proc/meminfo";// 系统内存信息文件
String str2; String[] arrayOfString;
long initial_memory = 0;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(
localFileReader, 8192);
str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小
arrayOfString = str2.split("\\s+");
for (String num : arrayOfString) {
Log.i(str2, num + "\t");
}
initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
localBufferedReader.close();
} catch (IOException e) { }
return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(70481b7a1711cc7931b71664yout.main);
tv = (TextView) findViewById(R.id.system_memory);
tv.setText("手机总内存: " + this.getTotalMemory() + ", " + "可用内存: "+ this.getAvailMemory());
}
}
运行结果如下:
令一种获取手机内存的方法:
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
blockSize = stat.getBlockSize();
AllSize = stat.getBlockCount();
availableBlocks = stat.getAvailableBlocks();
long AvailableSize=((availableBlocks*blockSize)/1024)/1024; //便得到了可用内存大小
long TotalSize=((AllSize*blockSize)/1024)/1024; //便得到了总内存大小
大功告成,顺利读取android手机的总内存和当前的可用内存。这里只是抛砖引玉,大家可以举一反三,进行扩展。当然我们还可以通过读取”/proc/cupinfo”来获取android手机的CPU参数,通过读取”/proc/stat”文件来计算CPU的使用率,这里不再赘述。
Android开发之系统信息【3】——获取Android网络连接信息
通过学习可以取得网络连接信息,判断网络连接状态,当前网络连接类型等。可以随意扩展。
public static String getNetworkInfo(Context context){
StringBuffer sInfo = new StringBuffer();
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo activeNetInfo = connectivity.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivity.getNetworkInfo( ConnectivityManager.TYPE_MOBILE );
if ( activeNetInfo != null )
{
Log.d("","XYZ_NetState_|TypeName:"+activeNetInfo.getTypeName()+"|Type:"+activeNetInfo.get Type()+"|State:"+activeNetInfo.getState()+"|ExtraInfo:"+activeNetInfo.getExtraInfo()
+"|Reason:"+activeNetInfo.getReason()+"|SubtypeName:"+activeNetInfo.getSubtypeName()+"|S ubtype:"+activeNetInfo.getSubtype()+"|DetailedState:"+activeNetInfo.getDetailedState());
sInfo.append("\nDetailedState:"+activeNetInfo.getDetailedState());
sInfo.append("\nState:"+activeNetInfo.getState());
sInfo.append("\nType:"+activeNetInfo.getType());
sInfo.append("\nTypeName:"+activeNetInfo.getTypeName());
sInfo.append("\nExtraInfo:"+activeNetInfo.getExtraInfo());
sInfo.append("\nReason:"+activeNetInfo.getReason());
sInfo.append("\nSubtype:"+activeNetInfo.getSubtype());
sInfo.append("\nSubtypeName:"+activeNetInfo.getSubtypeName());
sInfo.append("\n\n\n\n");
}
if( mobNetInfo != null )
{
Log.d("","XYZ_NetState_"+mobNetInfo.getTypeName()+":"+mobNetInfo.getExtraInfo());
}
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
Log.d("", "XYZ_isconnect");
}else{
sInfo.append("\nDetailedState:"+info[i].getDetailedState());
sInfo.append("\nState:"+info[i].getState());
sInfo.append("\nType:"+info[i].getType());
sInfo.append("\nTypeName:"+info[i].getTypeName());
sInfo.append("\nExtraInfo:"+info[i].getExtraInfo());
sInfo.append("\nReason:"+info[i].getReason());
sInfo.append("\nSubtype:"+info[i].getSubtype());
sInfo.append("\nSubtypeName:"+info[i].getSubtypeName());
sInfo.append("\n");
}
}
}
}
return sInfo.toString();
}
Android开发之系统信息【4】——获取Android已安装程序列表
public class Software extends Activity implements Runnable { List
ListView itemlist = null;
private ProgressDialog pd;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(70481b7a1711cc7931b71664s);
setTitle("软件信息");
itemlist = (ListView) findViewById(R.id.itemlist);
pd = ProgressDialog.show(this, "请稍候..", "正在收集你已经安装的软件信息...", true, false);
Thread thread = new Thread(this);
thread.start();
}
private void refreshListItems() {
list = fetch_installed_apps();
SimpleAdapter notes = new SimpleAdapter(this, list, 70481b7a1711cc7931b71664_row,
new String[] { "name", "desc" }, new int[] { 70481b7a1711cc7931b71664,
R.id.desc });
itemlist.setAdapter(notes);
setTitle("软件信息,已经安装"+list.size()+"款应用.");
}
public List fetch_installed_apps(){
List packages = getPackageManager().getInstalledApplications(0);
list = new ArrayList
packages.size());
Iterator l = packages.iterator();
while (l.hasNext()) {
Map
ApplicationInfo app = (ApplicationInfo) l.next();
String packageName = app.packageName;
String label = "";
try {
label = getPackageManager().getApplicationLabel(app).toString();
} catch (Exception e) {
Log.i("Exception",e.toString());
}
map = new HashMap
map.put("name", label);
map.put("desc", packageName);
list.add(map);
}
return list;
}
@Override
public void run() {
fetch_installed_apps();
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
refreshListItems();
pd.dismiss();
}
};
}
正在阅读:
Android开发之系统信息【4】——获取Android已安装程序列表04-27
学习中华传统文化心得体会-(7000字)03-12
赶小猪游戏作文700字06-20
2022年广西继续教育 普法与全面推进依法治国学习教材《社会主义04-11
九《上》杠杆--计算专题(1)01-25
小学生关爱生命,远离危险的手抄报图片02-12
申请入党的步骤及需要准备的材料09-08
如何制作科技论文中的Figures08-12
二建百科及常见问题汇总05-07
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- Android
- 获取
- 安装
- 程序
- 开发
- 列表
- 系统
- 信息
- 福师《学前儿童观察与评价》在线作业二-0001EDDBF
- 新概念英语2高材生一课一练-参考答案-陈瑞琳-9750
- 【新版】粤教版高中语文必修二《与妻书》优教导学案(教师版)【精品】
- 2017年北京邮电大学公共管理学院819公共管理专业综合之社会学概论新修考研题库
- 2018年湖北师范学院教育信息与技术学院725教育学基础理论综合之教育学考研核心题库
- 从《宋史刑法志》看宋代的司法制度(一)
- 给90后讲讲马克思(全文)
- 2020最新学校意识形态工作落实制度汇编
- 2018年苏州大学文学院333教育综合之外国教育史考研冲刺狂背五套题
- 发展战略-集团公司五年战略发展规划模板 精品
- 一个国王的爱情故事英文版
- 【应急预案】停电应急预案模板
- 高中语文阅读理解训练题之古诗文阅读傅青主善医1
- 环氧丙烷和氧化丁烯的安全仓储与操作资料复习课程
- 【总结汇报】最新整理-高三月考总结与学习经验介绍(范文精选)
- 2014高考数学二轮解答题专项训练及答案-解答题专项训练函数与导数
- 【必考题】中考七年级历史下第二单元辽宋夏金元时期第一次模拟试题(及答案)(4)
- 机器设备评估的成本法与市场法(doc 8页)
- 六年级英语,总复习大全
- 2018年山东科技大学数学与系统科学学院849概率论与数理统计考研冲刺狂背五套题