ActivityManagerRunningServiceInfo类: 封装了正在运行的服务信息
获取系统里所有真正运行的服务是通过调用ActivityManager方法来得到的,具体方法如下:
List<ActivityManagerRunningServiceInfo> getRunningServices (int maxNum)
功能:返回所有正在运行的服务
参数: maxNum 代表我们希望返回的服务数目大小,一般给个稍大的值即可, 例如,50 。
ActivityManagerRunningServiceInfo 类
常用字段:
long activeSince 服务第一次被激活的时间, 包括启动和绑定方式
int clientCount 如果该Service是通过Bind方法方式连接,则clientCount代表了service连接客户端的数目
int crashCount 服务运行期间,出现死机的次数
boolean foreground 若为true,则该服务在后台执行
int pid 如果不为0,表示该service所在的进程ID号( PS:为0的话我也不清楚 - - 求指点)
int uid 用户ID 类似于Linux的用户权限,例如root等
String process 进程名,默认是包名或者由属性android:process指定
ComponentName service 获得该Service的组件信息 包含了pkgname / servicename信息
PackageManger类
说明: 封装了对应用程序信息的 *** 作
获得应用程序信息的的方法如下:
public abstractApplicationInfo getApplicationInfo(String packageName, int flags)
参数:packagename 包名
flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可
功能:返回ApplicationInfo对象
关于PackageManger更多信息,请查看<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>
Task任务的使用,我也就不在赘述了,大家可以仔细看下SDK,在此推荐一篇博客来帮助大家理解。
/ 创建日期 2010-4-29 下午05:02:47 / package netsunniwellapp; import androidappActivity; import androidosBundle; import androidtelephonyCellLocation; import androidtelephonyPhoneStateListener; import androidtelephonyTelephonyManager; public class TelManager extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); TelephonyManager tm = (TelephonyManager) thisgetSystemService(TELEPHONY_SERVICE); / 电话状态: 1tmCALL_STATE_IDLE=0 无活动 2tmCALL_STATE_RINGING=1 响铃 3tmCALL_STATE_OFFHOOK=2 摘机 / tmgetCallState();//int / 电话方位: / tmgetCellLocation();//CellLocation / 唯一的设备ID: GSM手机的 IMEI 和 CDMA手机的 MEID Return null if device ID is not available / tmgetDeviceId();//String / 设备的软件版本号: 例如:the IMEI/SV(software version) for GSM phones Return null if the software version is not available / tmgetDeviceSoftwareVersion();//String / 手机号: GSM手机的 MSISDN Return null if it is unavailable / tmgetLine1Number();//String / 附近的电话的信息: 类型:List 需要权限:androidManifestpermission#ACCESS_COARSE_UPDATES / tmgetNeighboringCellInfo();//List / 获取ISO标准的国家码,即国际长途区号。 注意:仅当用户已在网络注册后有效。 / tmgetNetworkOperatorName();//String / 当前使用的网络类型: 例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0 NETWORK_TYPE_GPRS GPRS网络 1 NETWORK_TYPE_EDGE EDGE网络 2 NETWORK_TYPE_UMTS UMTS网络 3 NETWORK_TYPE_HSDPA HSDPA网络 8 NETWORK_TYPE_HSUPA HSUPA网络 9 NETWORK_TYPE_HSPA HSPA网络 10 NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B 4 NETWORK_TYPE_EVDO_0 EVDO网络, revision 0 5 NETWORK_TYPE_EVDO_A EVDO网络, revision A 6 NETWORK_TYPE_1xRTT 1xRTT网络 7 / tmgetNetworkType();//int / 手机类型: 例如: PHONE_TYPE_NONE 无信号 PHONE_TYPE_GSM GSM信号 PHONE_TYPE_CDMA CDMA信号 / tmgetPhoneType();//int / Returns the ISO country code equivalent for the SIM provider's country code 获取ISO国家码,相当于提供SIM卡的国家码。 / tmgetSimCountryIso();//String / Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM 5 or 6 decimal digits 获取SIM卡提供的移动国家码和移动网络码5或6位的十进制数字 SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断) / tmgetSimOperator();//String / 服务商名称: 例如:中国移动、联通 SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断) / tmgetSimOperatorName();//String / SIM卡的序列号: 需要权限:READ_PHONE_STATE / tmgetSimSerialNumber();//String / SIM的状态信息: SIM_STATE_UNKNOWN 未知状态 0 SIM_STATE_ABSENT 没插卡 1 SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2 SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3 SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4 SIM_STATE_READY 就绪状态 5 / tmgetSimState();//int / 唯一的用户ID: 例如:IMSI(国际移动用户识别码) for a GSM phone 需要权限:READ_PHONE_STATE / tmgetSubscriberId();//String / 取得和语音邮件相关的标签,即为识别符 需要权限:READ_PHONE_STATE / tmgetVoiceMailAlphaTag();//String / 获取语音邮件号码: 需要权限:READ_PHONE_STATE / tmgetVoiceMailNumber();//String / ICC卡是否存在 / tmhasIccCard();//boolean / 是否漫游: (在GSM用途下) / tmisNetworkRoaming();// } }
1获取系统的可用内存和总内存。
获取系统内存中应用的信息,需要用到ActivityManager这个类,然而当你用这个类拿数据的时候你会发现,拿到的数据不正确。用这个类的API获取系统的总内存和可用内存会出现数据不正确的情况。除了这个类,Android手机中有文件描述了这些信息——/proc/meminfo。meminfo文件中详细的记录了安卓手机的一些数据,包括可用内存和总内存。附上代码:
public static long getTotalMemSize() {
long size=0;
File file = new File("/proc/meminfo");
try {
BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String memInfo = bufferreadLine();
int startIndex = memInfoindexOf(":");
int endIndex = memInfoindexOf("k");
memInfo = memInfosubstring(startIndex + 1, endIndex)trim();
size = LongparseLong(memInfo);
size = 1024;
bufferclose();
} catch (javaioIOException e) {
eprintStackTrace();
}
return size;
}
public static long getAviableMemSize() {
long size=0;
File file = new File("/proc/meminfo");
try {
BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String memInfos=new String();
int i=0;
while ((memInfos=bufferreadLine())!=null){
i++;
if (i==2){
memInfo = memInfos;
}
}
int startIndex = memInfoindexOf(":");
int endIndex = memInfoindexOf("k");
memInfo = memInfosubstring(startIndex + 1, endIndex)trim();
size = LongparseLong(memInfo);
size = 1024;
bufferclose();
} catch (javaioIOException e) {
eprintStackTrace();
}
return size;
}
*** 作很简单分别是读取第一行的数据和第二行的数据,将字符串分去出,将所得值乘以1024变为byte类型。
2获取内存中运行应用的信息
首先,自然要有一个Bean文件用于存储这些信息,之后通过ActivityManager的getRunningAppProcesses()方法得到一个RunningAppProcessInfo的List。便利这个List去除我们想要的数据,存在我们的Bean文件夹中。
public static List<TaskBean> getAllTask() {
List<TaskBean>taskList=new ArrayList<>();
List<ActivityManagerRunningAppProcessInfo>runList=UIUtilsgetActManager()getRunningAppProcesses();
try {
for (ActivityManagerRunningAppProcessInfo r:runList) {
TaskBean taskBean = new TaskBean();
String processName = rprocessName;
taskBeansetPackageName(processName);
PackageInfo packageInfo = UIUtilsgetPacManager()getPackageInfo(processName, 0);
taskBeansetIcon(packageInfoapplicationInfoloadIcon(UIUtilsgetPacManager()));
taskBeansetName(packageInfoapplicationInfoloadLabel(UIUtilsgetPacManager())toString());
DebugMemoryInfo[] processInfo=UIUtilsgetActManager()getProcessMemoryInfo(new int[]{rpid});
taskBeansetMemSize(processInfo[0]getTotalPrivateDirty()1024);
if ((packageInfoapplicationInfoflags&ApplicationInfoFLAG_SYSTEM)!=0){
taskBeansetSystem(true);
}else {
taskBeansetUser(true);
}
if (taskList != null) {
taskListadd(taskBean);
for (int i=0;i<taskListsize();i++) {
if (taskListget(i)getPackageName()equals(ConstantsPACKAGE_INFO)){
taskListremove(i);
}
}
}
}
} catch (PackageManagerNameNotFoundException e) {
eprintStackTrace();
}
return taskList;
}
好了,大功告成。当你开开心心的拿到手机上调试的时候你会发现,一个数据都没有。原来,在Android50之后,谷歌处于完全考虑已经弃用了通过如上方法拿到进程中的信息。那么又应该怎么做呢?
public static List<TaskBean> getTaskInfos() {
List<AndroidAppProcess> processInfos = ProcessManagergetRunningAppProcesses();
List<TaskBean> taskinfos = new ArrayList<TaskBean>();
// 遍历运行的程序,并且获取其中的信息
for (AndroidAppProcess processInfo : processInfos) {
TaskBean taskinfo = new TaskBean();
// 应用程序的包名
String packname = processInfoname;
taskinfosetPackageName(packname);
// 湖区应用程序的内存 信息
androidosDebugMemoryInfo[] memoryInfos = UIUtilsgetActManager()
getProcessMemoryInfo(new int[] { processInfopid });
long memsize = memoryInfos[0]getTotalPrivateDirty() 1024L;
taskinfosetMemSize(memsize);
taskinfosetPackageName(processInfogetPackageName());
try {
// 获取应用程序信息
ApplicationInfo applicationInfo = UIUtilsgetPacManager()getApplicationInfo(
packname, 0);
Drawable icon = applicationInfoloadIcon(UIUtilsgetPacManager());
taskinfosetIcon(icon);
String name = applicationInfoloadLabel(UIUtilsgetPacManager())toString();
taskinfosetName(name);
if ((applicationInfoflags & ApplicationInfoFLAG_SYSTEM) == 0) {
// 用户进程
taskinfosetUser(true);
} else {
// 系统进程
taskinfosetSystem(true);
}
} catch (PackageManagerNameNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
// 系统内核进程 没有名称
taskinfosetName(packname);
Drawable icon = UIUtilsgetContext()getResources()getDrawable(
Rdrawableic_launcher);
taskinfosetIcon(icon);
}
if (taskinfo != null) {
taskinfosadd(taskinfo);
for (int i=0;i<taskinfossize();i++) {
if (taskinfosget(i)getPackageName()equals(ConstantsPACKAGE_INFO)){
taskinfosremove(i);
}
}
}
}
return taskinfos;
}
好了,接下来只需要判断安装的版本就可以了:
int sysVersion = IntegerparseInt(BuildVERSIONSDK);
taskList = sysVersion > 21 TaskManagerEnginegetTaskInfos() : TaskManagerEnginegetAllTask();
好了,大功告成。数据就能正常拿到了。
Android *** 作系统简介!各个版本的简介,买安卓手机一定要看哦
Andy Rubin创立了两个手机 *** 作系统公司:Danger和Android。Danger 5亿美元卖给微软,今年成为了Kin,Android4千万美元卖给Google。 Android是Google于2007年11月05日宣布的基于Linux平台的开源手机 *** 作系统的名称,该平台由 *** 作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。
Google通过与软、硬件开发商、设备制造商、电信运营商等其他有 关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。 Android 作为Google企业战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。全球为数众多的移动电话用户正在使用各种基于 Android 的电话。谷歌的目标是让(移动通讯)不依赖于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。
Android *** 作系统版本Android 11
发布时间:发布于 2009 年 2 月[1]
Android11主要特性 闹钟
API 示例
浏览器
计算器
摄像头
联系人
开发工具包
拨号应用
电子邮件
地图 (包含街景)
信息服务
音乐
设置
Android 15
该本又叫 “Cupcake”, 这是第一个主要版本,发布于 2009 年 5 月 这个升级之后,Android 表现出来的能力才真正吸引了开发者的目光。 用户界面得到了极大的改良,并且增添了以下功能:
Android15主要特性 录像
蓝牙A2DP
自动蓝牙连接
上传视频到 YouTube 以及 Picasa
复制/粘贴功能
Android 16
搭载Android 1615 的 HTC Hero 获得了意想不到的成功。Android 最终获得了非 Android 用户的关注,并且也让竞争者苹果和微软更加警惕了。Android 16 “Donut” 2009 年 9 月发布。 这个版本包含了:
Android16主要特性 Android 应用市场集成
照相、摄像以及浏览, 多选/删除功能
手势搜索
语音搜索应用集成
极大提升了语音阅读功能
对非标准分辨率有了更好的支持
Android 20/21
Android20/21: 2009 年 10 月 26 日,又一个主要版本升级以创纪录的速度放出。这次,大版本升级到了Android 20/21 “Eclair” 它包含:
Android 20/21主要特性 提升硬件速度
更多屏幕以及分辨率选择
大幅度的用户界面改良
支持 Exchange活动墙纸
大幅改进虚拟键盘
蓝牙 21
Google 地图 312
中国首款20手机摩托罗拉XT800 Android 201 SDK 于 2009 年 12 月 3 日 发布,之后是2010 年 1 月 10 日的 21 版本。很多用户和围观群众可能会奇怪:“为什么 Android 会用甜点作为它们系统版本的代号?”,这个命名方法开始于 Andoird 15 发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照字母数序:小蛋糕,甜甜圈还有松饼。之前人们预计 22 版本的代号会是“馅饼”,但这个被最终证明是错误的,“FroYo”(冻酸奶)才是 Android 22 这个伴随 Google Nexus One 发布的新版的最新代号。下一个版本的代号将会是“姜饼”。
Android 22
该版本名字叫 “Froyo”,中文代号称“冻酸奶”,Nexus One 的用户已经开始接受 Android 22 “FroYo” 的无线更新,其他机型的用户应该会在短时间内获取到这一更新。这一版本包含大量让其他手机用户垂涎三尺的更新,包括了:
Android 22主要特性 完整的 Flash 101 支持
最高 5 倍速度提升
最多支持 8 个设备连接的移动热点功能
有着专用链接的改进版主屏幕
大量 Exchange 支持改进,支持 Exchange 2010,包括远程数据抹除,自动发现服务,完整的日程表支持,全局联系人列表查找。
摄像头/视频改进,比如:更好的屏幕控制按钮,人民群众喜闻乐见的录像时开启闪光灯进行照明的功能。
多键盘语言支持
Android 云信息将应用安装在记忆卡上
蓝牙语音拨号
支持720P视频录制
Android 30
目前的消息众口一词声称 Android 30 “Gingerbread” 将会在今年秋天的某个时候发布,它将带来很多激动人心的新特性。
俄罗斯著名手机网站Mobile Review总编埃尔达·莫塔金(Eldar Murtazin)周三曝料,代号为“姜饼”(Gingerbread)的谷歌Android 30系统将于今年第四季度上市。与此同时,莫塔金还披露了Android 30系统的一些细节。
Android 30最低配置
升级Android 30的系统推荐配置为1GHz处理器、512MB RAM、35英寸屏幕或更大屏幕;而且指出Android 30将面向高端市场,而低端市场则保留21和22系统。
Android手机是使用Android *** 作系统或OMS *** 作系统的手机
中国市场Android手机在摩托罗拉公司和中国移动,中国联通的推广下发展迅速,摩托罗拉Android手机的XT702,XT701,ME600等在中国市场销量进前十。
摩托罗拉
摩托罗拉XT800 MOTO智尚
摩托托罗拉XT711 MOTOROI
摩托罗拉XT702 MileStone
摩托罗拉XT701MileStone XT701
摩托罗拉 XT502MileStone XT501
摩托罗拉 XT3
摩托罗拉 XT301
摩托罗拉ME600 Backflip
摩托罗拉ME501 CILQ XT
摩托罗拉MT710 MOTO智领
摩托罗拉MT720 MOTO智领
摩托罗拉A1680 MING
摩托罗拉MT810 3D手机
摩托罗拉ME511 Flipout
摩托罗拉ME600Backflip黑金刚版
摩托罗拉 ME502
摩托罗拉 Droid 2
摩托罗拉 Droid X(目前机王)
摩托罗拉I1(iDEN系列)
注:摩托罗拉MT710 ,摩托罗拉MT720 ,摩托罗MT810使用中国移动的OMS *** 作系统
索尼爱立信(Sony Ericsson)
索尼爱立信Xperia X10
索尼爱立信Xperia X10i
索尼爱立信Xperia X10 mini(E10i)
索尼爱立信Xperia X10 mini pro(U20i)
索尼爱立信Xperia X8(Shakira)
三星(samsuny)
三星i899(Galaxy i899)
三星i7500(Galaxy)
三星I6500U(Saturn
三星i5700 (Galaxy Spica)
三星i5800(Galaxy 3)
三星GT-i9000(Galaxy S)
三星i8520(Galaxy Beam)
三星I8500
三星I5500
HTC
HTC G1 (Dream)
HTC G2 (Magic)
HTC G3 (Hero)
HTC G4 (Tattoo)
HTC G5 (Google Nexus one)
HTC G6 (Legend)
HTC G7 (Desire)
HTC G8 (wildfire)
HTC Droid Incredible
HTC Evo 4G
HTC Vision
HTC Desire HD
HTC ACE
HTC Glacier
以下三款手机是HTC在2010年7月27日进军大陆市场发布首期的三款Android系统新品
HTC天怡(Android 22系统)
HTC渴望(G7 Desire 大陆版为Android 22系统)
HTC野火(G8 Wildfire 大陆版为Android 22 系统)
联想乐phone
首派A60、A70
LG GW620、GT540
魅族魅族M9
欧盛W180
宏基A1
中兴R750、UX850
华为U8220、U8230、U8110
HKCihkc X1
安卓系统每个版本的名字如下:
1、纸杯蛋糕(Android 15);
2、甜甜圈(Android 16);
3、松饼(Android 20/21);
4、冻酸奶(Android 22);
5、姜饼(Android 23);
6、蜂巢(Android 30);
7、冰激凌三明治(Android 40);
8、果冻豆(Jelly Bean;Android41和Android 42);
9、奇巧(KitKat;Android 44);
10、棒棒糖(Lollipop;Android 50);
11、棉花糖(Marshmallow;Android 60);
12、牛轧糖(Nougat;Android 70);
13、奥利奥(Oreo;Android 80);
14、派(Pie;Android 90)。
扩展资料
安卓各版本的命名规则:
Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android 10)。
后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点命名法开始于Android 15发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序。
以上就是关于android 怎么获取service的类名全部的内容,包括:android 怎么获取service的类名、android系统如何获取imei号码,获取手机型号和系统版本号、如何获取android 进程信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)