android 获取手机中应用运行的时长和次数
android5.0用UsageStatsManager来获取程序运行时间
本来想用PkgUsageStats来获取的,后来看到有人说5.0以后可以直接用UsageStatsManager来获取信息,而不用之前麻烦的反射了,所以试着用了一下。
不多说了,直接贴主要代码
- Calendar beginCal = Calendar.getInstance();
- beginCal.add(Calendar.HOUR_OF_DAY, -1);
- Calendar endCal = Calendar.getInstance();
- UsageStatsManager manager=(UsageStatsManager)getApplicationContext().getSystemService(USAGE_STATS_SERVICE);
- List<UsageStats> stats=manager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,beginCal.getTimeInMillis(),endCal.getTimeInMillis());
这里直接调用了USageStatsManager的queryUsageStas()的方法,里面3个参数,分别是:
- 为int的字段,时间的统计的单位,即小时,天,月,年这类的
- 开始的时间
- 结束的时间
然后我们就能得到UsageStats的list,UsageStats可以提供几个方法给我们,可以得到运行的总时长,最后运行的时间,应用的包名。
- StringBuilder sb=new StringBuilder();
- for(UsageStats us:stats){
- try {
- <span style="white-space:pre"> </span>PackageManager pm=getApplicationContext().getPackageManager();
- ApplicationInfo applicationInfo=pm.getApplicationInfo(us.getPackageName(),PackageManager.GET_META_DATA);
- if((applicationInfo.flags&applicationInfo.FLAG_SYSTEM)<=0){
- SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
- String t=format.format(new Date(us.getLastTimeUsed()));
- sb.append(pm.getApplicationLabel(applicationInfo)+"\t"+t+"\t"+getTimeFromInt(us.getTotalTimeInForeground())+"\n");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
这里还用到的就是PackageManager,这里能用这个类能通过包名来得到应用的信息,我这里只是简单的获得应用的名称,没有获得其他的信息。
然后在AndroidManifest.xml里加上一句
- <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
- tools:ignore="ProtectedPermissions"/>
就可以运行了。
但是运行时会发现并没有应用,因为我们需要打开对应的权限。可以在代码里加一句
- startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
跳转到对应的权限设置界面,将我们的运用打开就行了。
下面就是完成图
重要的事情多说一遍:只是针对5.0以上的系统
权限一定要给:不给没得玩
android 获取手机中应用运行的时长和次数相关推荐
- Android获取mp3音频文件播放总时长
Android获取mp3音频文件播放总时长 一般是需要文件的绝对路径,需要读取文件,转成媒体类解析,最好获取播放时长,然后关闭资源. /** * 获取音频文件的总时长大小 * * @param fil ...
- Android获取手机中外置内存卡、内置内存卡、手机内存路径
http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...
- Android获取手机中的所有音乐地址
//获取手机中的所有音乐 public static LinkedHashMap<Integer, MusicDatas> getAllMusicFile(Context context) ...
- Android获取手机中外置内存卡 内置内存卡 手机内存路径
http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...
- Android 获取手机中微信聊天记录
首先我们要知道,微信的聊天记录一般是不提供给我们获取的,所以一般情况下我们手机没root的话就拿不到了.就算是root后的手机,想要获取微信的EnMicroMsg.db文件并且解密它.打开它也有点难度 ...
- Android 获取手机中微信聊天记录并后台发送到邮箱
实验软件 :Android Studio 实验设备:Root过的真机一部或者夜神模拟器 测试效果 废话不多说 直接上代码 获取手机微信数据库目录并发送邮件 class CoreService : I ...
- Android 获取手机中的图片信息的两种方法
1, Android 使用ContentProvider扫描手机中的图片 // 必须在查找前进行全盘的扫描,否则新加入的图片是无法得到显示的(加入对sd卡操作的权限)//todo 仅限于android ...
- android 获取图片上某一个文字位置_android 获取手机中的所有图片或某一目录下的图片方法...
获取手机中的所有图片,并过滤获取某一目录下的图片.(注释掉的代码可以按照目录分组) private void getAllPhotoInfo() { new Thread(new Runnable() ...
- Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册
一.获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片: 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地 ...
最新文章
- 钉钉密聊安不安全 钉钉密聊别人能看到吗
- hasOwnProperty.call
- Android-入门学习笔记-图片和外观改善
- 从泰勒展开到牛顿迭代
- 联想服务器如何进入pe系统,如何制作支持Legacy BIOS和UEFI BIOS两种模式启动的Windows PE...
- Unity 打包微信
- 一个线性四叉树编码的试题
- CodeBook算法
- matlab距离平方和公式推导,求助高手,用matlab求两幅图像平方和再开根号公式怎样表达?...
- Flutter技术在会展云中大显身手
- oce专项认证 oracle_Oracle Certification Program | Oracle 中国
- Flask-SQLAlchemy牛刀小试
- Network App Recommend
- html/css简单描述
- pyqt UI设计以及pyuic工具的使用
- 研发效能系列----开源的数据库版本管理工具Flyway
- 人体姿态估计-Human Pose Estimation (2021)
- SSID, BSSID, ESSID
- yanzhenjie:permission:1.0.5 使用
- 2017c语言考核册答案,2017年C语言考试试题附答案