Android 监控手机应用使用情况

本文介绍如何通过Android获取顶层Activity,实现手机应用使用情况的监控。由于没有现成的API,作者创建了一个原生Android应用,每10秒上报服务器获取数据,并详细讲解了后台服务设置、权限配置和监听代码编写。
摘要由CSDN通过智能技术生成

简介

本篇文章中通过Android获取手机顶部的Activity的方式,来达到监控手机应用使用情况的目的

技术背景

在自己的日常学习中,想要自动收集手机软件各个应用的使用时间,比如得到、极客时间、Keep、微信读书等

但在查找下,没有找到他们有对应的API开发接口,没有办法去获取

小米手机里面有手机应用使用情况,屏幕使用时间里面,数据看着挺好,挺合适的,但也不知道怎么获取

最后只能自己写一个原生的Android应用,通过获取手机顶层Activity的方式,每隔10秒上报服务器,并设置好Activity与应用名称的映射,来达到自己的手机应用使用统计目的

代码细节

完整代码GitHub上有:https://github.com/lw1243925457/self_growth_android

仅做代码参考,目前数据监控上传是有了,但界面这些还很粗糙,没有完善

使用这个功能需要注意下面的几点:

  • 1.需要将监听设置为后台服务,避免切换成其他应用后频繁被kill掉
  • 2.需要调用相关的权限设置,让用户开启相关的应用情况获取权限
  • 3.剩下的就是应用监听代码的编写了

具体的代码如下:

应用监听-获取手机顶层Activity

我们需要新建一个后台服务,继承Service即可,然后开启一个定时器,每十秒获取一次顶层Activity,数据上传部分可忽略

代码如下:

public class MonitorActivityService extends Service {
   

    private String beforeActivity;
    private final ActivityRequest activityRequest = new ActivityRequest();

    /*
     * @param intent
     * @param flags
     * @param startId
     * @return
     */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
   
        //处理任务
        return START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
   
        return null;
    }

    @SuppressLint("CommitPrefEdits")
    @Override
    public void onCreate() {
   
        super.onCreate();
        Log.d("foreground", "onCreate");
        //如果API在26以上即版本为O则调用startForefround()方法启动服务
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
   
            setForegroundService();
        }
    }

    /**
     * 通过通知启动服务
     * 
     * 10秒获取一次
     */
    @androidx.annotation.RequiresApi(api = Build.VERSION_CODES.O)
    public void  setForegroundService()
    {
   
        //设定的通知渠道名称
        String channelName = "test";
        //设置通知的重要程度
        int importance = NotificationManager.IMPORTANCE_LOW;
        //构建通知渠道
        NotificationChannel channel = new NotificationChannel("232", channelName, importance);
        channel.setDescription("test");
        //在创建的通知渠道上发送通知
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "232");
        builder.setSmallIcon(R.drawable.ic_launcher_foreground) //设置通知图标
                .setContentTitle("正在监控手机活动并上报")//设置通知标题
                .setContentText("正在监控手机活动并上报")//设置通知内容
                .setAutoCancel(true) /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值