安卓系统监听应用开启和关闭的实现

最近因为一个项目需要监听软件开启和关闭,以为安卓系统会有相关的BroadcastReciver,结果查了下资料,没有相关的广播,后来在论坛上看见别人用Service监听栈顶的activity实现应用开启和关闭的监听。我就直接上我的代码了。里面鞋油注释,如果有不懂的,可以加我QQ群与我交流:197737933.

import java.util.Timer;import java.util.TimerTask;import android.app.ActivityManager;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;{String packageName_now = IBinder onBind(Intent intent) {;}() {timer.schedule(task, 0, 500); //开始监听应用,每500毫秒查询一次,用这种方式循环比while更节约资源,而且更好用,这个项目刚开始用了while,把我坑坏了super.onCreate();}Handler handler_listen = new Handler() {(Message msg) {if (msg.what == 1) {ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);ComponentName cn = am.getRunningTasks(1).get(0).topActivity;//获取到栈顶最顶层的activity所对应的应用String packageName = cn.getPackageName();//从ComponentName对象中获取到最顶层的应用包名if (!packageName_now.equals(packageName)) {//如果两个包名不相同,那么代表切换了应用packageName_now=packageName;//更新当前的应用包名isAppStart=false;//将是否是监听的应用包名的状态修改为false}if (packageName.equals(“com.tencent.mobileqq”)) {//这里举例监听QQif (!isAppStart) {isAppStart=true;//因为一直在循环,,所以需要加个isAppStart判断防止代码重复执行//。。。。逻辑处理}}}super.handleMessage(msg);};};Timer timer = new Timer();TimerTask task = new TimerTask() {() {Message message = new Message();message.what = 1;handler_listen.sendMessage(message);}};() {timer.cancel();//销毁服务的时候同时关闭定时器timersuper.onDestroy();}}

最后记得加上权限

<uses-permission android:name=”android.permission.GET_TASKS” />

如果你不出去走走,你就会以为这就是世界。

安卓系统监听应用开启和关闭的实现

相关文章:

你感兴趣的文章:

标签云: