当前位置:编程学习 > wap >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,