앱 실행 횟수 실행 시간 등 정보 가 져 오기
3236 단어 android 총괄-apk
PkGUsageStats.java 경로:framework/base/core/java/com/android/internal/os/PkGUsageStats.java
// use reflect
// have to root and push into system/app
private void getPkgUsageStats()
{
try {
Class> cServiceManager = Class
.forName("android.os.ServiceManager");
Method mGetService = cServiceManager.getMethod("getService",
java.lang.String.class);
Object oRemoteService = mGetService.invoke(null, "usagestats");
// IUsageStats oIUsageStats =
// IUsageStats.Stub.asInterface(oRemoteService)
Class> cStub = Class
.forName("com.android.internal.app.IUsageStats$Stub");
Method mUsageStatsService = cStub.getMethod("asInterface",
android.os.IBinder.class);
Object oIUsageStats = mUsageStatsService.invoke(null,
oRemoteService);
// PkgUsageStats[] oPkgUsageStatsArray =
// mUsageStatsService.getAllPkgUsageStats();
Class> cIUsageStatus = Class
.forName("com.android.internal.app.IUsageStats");
Method mGetAllPkgUsageStats = cIUsageStatus.getMethod(
"getAllPkgUsageStats", (Class[]) null);
Object[] oPkgUsageStatsArray = (Object[]) mGetAllPkgUsageStats
.invoke(oIUsageStats, (Object[]) null);
System.out.println(oPkgUsageStatsArray);
Class> cPkgUsageStats = Class
.forName("com.android.internal.os.PkgUsageStats");
StringBuffer sb = new StringBuffer();
sb.append("nerver used : ");
for (Object pkgUsageStats : oPkgUsageStatsArray) {
// get pkgUsageStats.packageName, pkgUsageStats.launchCount,
// pkgUsageStats.usageTime
String packageName = (String) cPkgUsageStats.getDeclaredField(
"packageName").get(pkgUsageStats);
int launchCount = cPkgUsageStats
.getDeclaredField("launchCount").getInt(pkgUsageStats);
long usageTime = cPkgUsageStats.getDeclaredField("usageTime")
.getLong(pkgUsageStats);
if(launchCount > 0)
Log.v("getPkgUsageStats",packageName + " count: " + launchCount + " time: "
+ usageTime);
else{
sb.append(packageName+" ");
}
}
Log.v("getPkgUsageStats",sb.toString());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} 직접 참조 코드:
4.567913.system 권한 이 필요 합 니 다.push 로 들 어가 거나 핸드폰 의 framework 와 같은 서명 을 사용 할 수 있 습 니 다.
또 얻 은 데 이 터 는 많 지 않 은 것 같 지만 켜 놓 고 새로 고치 지 않 아 나중에 보충 해 야 한다.