android 应用程序使用统计

这篇博客介绍了如何通过反射方法获取Android系统的usagestats服务,详细展示了如何调用`getService`、`asInterface`以及`getAllPkgUsageStats`等方法来获取包的使用统计信息,包括包名、启动次数和使用时间。注意,使用这些方法需要添加`<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>`权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//通过反射方法获得usagestats服务        
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");  
  
        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);  
            System.out.println(packageName + ":" + launchCount + ":"  
                    + usageTime);  
注意加权限:<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值