如何在每分钟后运行BroadcastReceiver?

时间:2013-03-25 13:10:57

标签: android broadcastreceiver

我正在开发一个应用程序来监控每分钟后的网络。我正在使用BroadcastReceiver。

我想在每分钟后执行BroadcastReceiver。

我该怎么办?我可以在BroadcastReceiver中使用Thread.sleep()吗?

可以继续在android中继续运行BroadcastReceiver吗?

6 个答案:

答案 0 :(得分:7)

BroadcastReceievers设计为仅在接收到某些广播(系统广播或用户定义的广播)时运行。如果您希望每分钟运行一些代码,您可以使用Alarm Manager创建服务并为每分钟运行计划一次。您可以使用警报管理器从广播接收器启动服务,它将每分钟运行一次。

在广播接收器的onRecieve()方法中,使用类似于下面给出的代码:

PendingIntent service = null; 
Intent intentForService = new Intent(context.getApplicationContext(), YourService.class);
final AlarmManager alarmManager = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
final Calendar time = Calendar.getInstance();
time.set(Calendar.MINUTE, 0);
time.set(Calendar.SECOND, 0);
time.set(Calendar.MILLISECOND, 0);
if (service == null) {
 service = PendingIntent.getService(context, 0,
                    intentForService,    PendingIntent.FLAG_CANCEL_CURRENT);
        }

        alarmManager.setRepeating(AlarmManager.RTC, time.getTime()
                .getTime(), 60000, service);

答案 1 :(得分:2)

即使没有AlarmManager,您也可以这样做

    private void ping() {
    try {
        //Your code here

    } catch (Exception e) {
        e.printStackTrace();
    }
      scheduleNext();
    }

    private void scheduleNext() {
      mHandler.postDelayed(new Runnable() {
        public void run() { ping(); }
      }, 60000);
    }

    public int onStartCommand(Intent intent, int x, int y) {
      mHandler = new android.os.Handler();
      ping();
      return START_STICKY;
    }

答案 2 :(得分:1)

没有。如果你能提供帮助,那么连续运行任何会耗尽Android或任何其他移动操作系统电池的东西是完全不可接受的。

你应该做的是使用AlarmManager类并每隔一分钟触发一次Intent,然后激活一个Service,你可以在其中运行你想要的任何代码。

有关示例,请参阅this answer

有关详细信息,请参阅此主题: Android: How to use AlarmManager

答案 3 :(得分:1)

是否有理由需要BroadcastReceiver?如果是这样,答案非常简单,就是让某个组件每分钟广播它收到的Intent。

我认为你应该看一下Alarm Manager。您可以对其进行编程,以定期在您的应用中触发PendingIntent。我敢打赌那就是你想要的。

答案 4 :(得分:0)

我建议您使用Service组件,而不是使用BroadcastReceiver。您的代码可能需要超过10秒才能执行,但是对于BroadcastReceiver,您执行代码的时间限制为10秒。

此外,服务最适合后台处理,如下载,上传或播放音乐。

所以我建议您使用执行服务而不是BroadcastReceiver。

答案 5 :(得分:0)

而不是BroadcastReceiver。您应该使用AlarmManager,以便在特定时间间隔内启动Service

您可以从here

获取示例源代码

希望它会有所帮助。