如何通过BroadcastReceiver在Android中获取前台运行应用程序

时间:2014-09-03 13:02:36

标签: android broadcastreceiver

我在scheduleAtFixedRate中使用Service来每2秒获取前台运行的应用

Timer timer  =  new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

        public void run()
        {

            chatHead.post(new Runnable() {
                public void run() {
                    List<ActivityManager.RunningTaskInfo> procInfos = activityManager.getRunningTasks(1);

                    if (procInfos.get(0).topActivity.getPackageName().equals("com.xyz")) {

                        chatHead.setVisibility(ImageButton.VISIBLE);

                    } else {
                        chatHead.setVisibility(ImageButton.GONE);


                    }
                }
            });

        }
    }, 2000, 3000);  

这占用了太多CPU,我收到了 clear master app 的警告。我也不想在这里使用计时器...有什么方法可以通过BroadcastReiver或任何简单的方式运行应用程序吗?

2 个答案:

答案 0 :(得分:0)

  

我想在计算器上放一个浮动图标..每当计算器是我的顶级应用程序时......我的浮动图标应该是可见的

然后让您的热门应用程序通知您的浮动计算器(即通过发送Intent),以便它知道显示。

答案 1 :(得分:0)

改为使用警报概念

void setalarm() 
{
    AlarmManager am = (AlarmManager) getApplicationContext()
            .getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(getApplicationContext(), ServiceSync.class);
    i.putExtra("ping", true);
    PendingIntent pI = PendingIntent.getService(this, 666, i,
            PendingIntent.FLAG_UPDATE_CURRENT);
    try {
        am.cancel(pI);
    } catch (Exception e) {
    }
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 2000,
            pI);
}