android调用系统中的应用点击次数统计 无法运行求大神帮助!
废话不多说 直接上代码
public int compare(ApplicationInfo a,ApplicationInfo b) {
//这个地方被我修改过
//原来的是ComponentName aName = a.intent.getComponent();这个不能通过
ComponentName aName = new ComponentName("com.example.testapp", "com.example.testapp.MainActivity"); //null;//a.c
ComponentName bName =null;// b..getComponent();
int aLaunchCount=0 ,bLaunchCount=0;
long aUseTime=0,bUseTime=0;
int result = 0;
try {
//获得ServiceManager类
Class<?> ServiceManager = Class.forName("android.os.ServiceManager");
//获得ServiceManager的getService办法
Method getService = ServiceManager.getMethod("getService",java.lang.String.class);
//调用getService获取RemoteService
Object oRemoteService = getService.invoke(null, "usagestats");
//获得IUsageStats.Stub类
Class<?> cStub = Class.forName("com.android.internal.app.IUsageStats$Stub");
//获得asInterface办法
Method asInterface = cStub.getMethod("asInterface",android.os.IBinder.class);
//调用asInterface办法获取IUsageStats对象
Object oIUsageStats = asInterface.invoke(null, oRemoteService);
//获得getPkgUsageStats(ComponentName)办法
Method getPkgUsageStats = oIUsageStats.getClass().getMethod("getPkgUsageStats", ComponentName.class);
//调用getPkgUsageStats 获取PkgUsageStats对象
//到这里就报错了
Object aStats = getPkgUsageStats.invoke(oIUsageStats, aName);
Object bStats = getPkgUsageStats.invoke(oIUsageStats, bName);
//获得PkgUsageStats类
Class<?> PkgUsageStats = Class.forName("com.android.internal.os.PkgUsageStats");
aLaunchCount = PkgUsageStats.getDeclaredField("launchCount").getInt(aStats);
bLaunchCount = PkgUsageStats.getDeclaredField("launchCount").getInt(bStats);
aUseTime = PkgUsageStats.getDeclaredField("usageTime").getLong(aStats);
bUseTime = PkgUsageStats.getDeclaredField("usageTime").getLong(bStats);
if((aLaunchCount>bLaunchCount)||
((aLaunchCount == bLaunchCount)&&(aUseTime>bUseTime)))
result = 1;
else if((aLaunchCount<bLaunchCount)||((aLaunchCount==
bLaunchCount)&&(aUseTime<bUseTime)))
result = -1;
else {
result = 0;
}
} catch (Exception e) {
e.printStackTrace();
// Log.e("###", e.toString(), e);
}
return result;
}
异常输出:
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.aim.tongjitest.MainActivity.compare(MainActivity.java:102)
at com.aim.tongjitest.MainActivity.onCreate(MainActivity.java:47)
at android.app.Activity.performCreate(Activity.java:4504)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.SecurityException: Neither user 10003 nor current process has android.permission.PACKAGE_USAGE_STATS.
at android.os.Parcel.readException(Parcel.java:1327)
at android.os.Parcel.readException(Parcel.java:1281)
at com.android.internal.app.IUsageStats$Stub$Proxy.getPkgUsageStats(IUsageStats.java:215) --------------------编程问答-------------------- SecurityException
权限问题 --------------------编程问答-------------------- 同求解决方案,不是权限问题。 --------------------编程问答-------------------- 找个解决方法了 把程序编译好后拷贝到system/app下面 但是机器必须root才行!! --------------------编程问答-------------------- 需求最新解决方案。 --------------------编程问答-------------------- 解决了没有?我也碰到了,包括//原来的是ComponentName aName = a.intent.getComponent();这个不能通过 有人说网上引用的是luncher的applicationinfo 所以才出错的 --------------------编程问答-------------------- 同求解决方案 --------------------编程问答-------------------- 我就想不通了 那么大的Caused by: java.lang.SecurityException: Neither user 10003 nor current process has android.permission.PACKAGE_USAGE_STATS.
这尼玛求解决方案 还信誓旦旦的说不是权限问题
补充:移动开发 , Android