android 获得一个应用程序的启动次数,运行时间等信息
转载声明,原文出自:http://androidkaifa.com/thread-1036-1-1.html
通过com.android.internal.os.PkgUsageStats这个类可以得到一个应用程序的启动次数,运行时间等信息,功能很强大。但是google并没有将这个类作为API接口提供给开发者,如果在android源码下开发,可以通过以下代码来使用这个类:
1 import com.android.internal.app.IUsageStats; 2 import com.android.internal.os.PkgUsageStats; 3 4 //比较两个应用程序的启动次数和运行时间 5 public final int compare(ApplicationInfo a, ApplicationInfo b) { 6 ComponentName aName = a.intent.getComponent(); 7 ComponentName bName = b.intent.getComponent(); 8 int result = 0; 9 //get usagestats service 10 IUsageStats mUsageStatsService = IUsageStats.Stub 11 .asInterface(ServiceManager.getService("usagestats")); 12 try { 13 //get PkgUsageStats 14 PkgUsageStats aStats = mUsageStatsService 15 .getPkgUsageStats(aName); 16 PkgUsageStats bStats = mUsageStatsService 17 .getPkgUsageStats(bName); 18 if(aStats!=null && bStats!=null) { 19 if ((aStats.launchCount > bStats.launchCount) 20 || ((aStats.launchCount == bStats.launchCount) && (aStats.usageTime > bStats.usageTime))) 21 result = -1; 22 else if ((aStats.launchCount < bStats.launchCount) 23 || ((aStats.launchCount == bStats.launchCount) && (aStats.usageTime < bStats.usageTime))) 24 result = 1; 25 else { 26 result = 0; 27 } 28 }else if(aStats!=null && bStats ==null) { 29 result = -1; 30 } else if(aStats==null && bStats !=null) { 31 result = 1; 32 } 33 } catch (RemoteException e) { 34 Log.i("TAG", "get package usage stats fail"); 35 } 36 37 return result; 38 } 39
那么如果想在sdk中使用这个 类要如果作呢--可以使用反射 的方法,代码如下:
1 public final int compare(ApplicationInfo a, ApplicationInfo b) { 2 3 ComponentName aName = a.intent.getComponent(); 4 ComponentName bName = b.intent.getComponent(); 5 int aLaunchCount,bLaunchCount; 6 long aUseTime,bUseTime; 7 int result = 0; 8 9 try { 10 11 //获得ServiceManager类 12 Class<?> ServiceManager = Class 13 .forName("android.os.ServiceManager"); 14 15 //获得ServiceManager的getService方法 16 Method getService = ServiceManager.getMethod("getService", java.lang.String.class); 17 18 //调用getService获取RemoteService 19 Object oRemoteService = getService.invoke(null, "usagestats"); 20 21 //获得IUsageStats.Stub类 22 Class<?> cStub = Class 23 .forName("com.android.internal.app.IUsageStats$Stub"); 24 //获得asInterface方法 25 Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class); 26 //调用asInterface方法获取IUsageStats对象 27 Object oIUsageStats = asInterface.invoke(null, oRemoteService); 28 //获得getPkgUsageStats(ComponentName)方法 29 Method getPkgUsageStats = oIUsageStats.getClass().getMethod("getPkgUsageStats", ComponentName.class); 30 //调用getPkgUsageStats 获取PkgUsageStats对象 31 Object aStats = getPkgUsageStats.invoke(oIUsageStats, aName); 32 Object bStats = getPkgUsageStats.invoke(oIUsageStats, bName); 33 34 //获得PkgUsageStats类 35 Class<?> PkgUsageStats = Class.forName("com.android.internal.os.PkgUsageStats"); 36 37 aLaunchCount = PkgUsageStats.getDeclaredField("launchCount").getInt(aStats); 38 bLaunchCount = PkgUsageStats.getDeclaredField("launchCount").getInt(bStats); 39 aUseTime = PkgUsageStats.getDeclaredField("usageTime").getLong(aStats); 40 bUseTime = PkgUsageStats.getDeclaredField("usageTime").getLong(bStats); 41 42 if((aLaunchCount>bLaunchCount)|| 43 ((aLaunchCount == bLaunchCount)&&(aUseTime>bUseTime))) 44 result = 1; 45 else if((aLaunchCount<bLaunchCount)||((aLaunchCount == 46 bLaunchCount)&&(aUseTime<bUseTime))) 47 result = -1; 48 else { 49 result = 0; 50 } 51 52 } catch (Exception e) { 53 Log.e("###", e.toString(), e); 54 } 55 56 return result; 57 } 58
如何看自己的android的详细使用信息:
我们使用Andoroid手机时想看看自己的手机的使用情况,那么我们又如何去操作呢?也是必需得像程序这样要自己写一个程序才能查看吧,如果用户不是编程的,那得怎么办,呵,其实我们查看自己的手机使用详情是没有那么复杂的,今天androidkaifa.com就会大家说一下如何查询自己的手机的使用情况,下面是具体的查看方法,
其实查看方法非常简单,直接进入Android的工程模式即可,操作步骤如下:(笔者的android手机系统是4.0)
1、首先进入Android手机操作系统的拨号界面,直接输入“*#*#4636#*#*”(不加引号)即可以快速进入Android操作系统的工程测试模式。
2、在“测试”模式菜单中有手机信息“Phone information”、电池信息“Battery information”、WI-FI信息“WI-FI information”、使用状态“Usage statistics”四个选项。
3、我们点击选择第二项“Battery information”进入电池信息,然后就可以看到手机电池的详细信息了,其中包括电量等级、电池状态、温度、电池材质、电压等等信息。
4: 我们相应点击其实的选择就可以看到其实的相应的使用详细信息