Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在每分钟后运行广播接收器?_Android_Broadcastreceiver - Fatal编程技术网

Android 如何在每分钟后运行广播接收器?

Android 如何在每分钟后运行广播接收器?,android,broadcastreceiver,Android,Broadcastreceiver,我正在开发一个应用程序,每分钟监控一次网络。我用的是广播接收机 我想在每分钟后执行广播接收器 我怎么做?我可以在BroadcastReceiver中使用Thread.sleep()吗 在android中继续运行BroadcastReceiver可以吗?我建议您使用服务组件,而不是使用BroadcastReceiver。您的代码可能需要超过10秒才能执行,但是对于BroadcastReceiver,您执行代码的时间限制为10秒 此外,该服务最适合于下载、上传或播放音乐等后台处理 因此,我建议您使用

我正在开发一个应用程序,每分钟监控一次网络。我用的是广播接收机

我想在每分钟后执行广播接收器

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


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

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

此外,该服务最适合于下载、上传或播放音乐等后台处理


因此,我建议您使用execute service而不是BroadcastReceiver。

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

在广播接收器的onReceive()方法中,使用类似以下给定代码:

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);

不,如果你能帮助的话,在Android或任何其他移动操作系统中持续运行任何会耗尽电池的东西是绝对不能接受的

您应该做的是使用类并每隔一分钟左右激发一个意图,这反过来将激活一个脚本,您可以在其中运行任何您想要的代码

有关示例,请参见

有关详细信息,请参阅此线程:

您需要广播接收器的原因是什么?如果是这样,答案很简单,就是让某个组件每分钟广播它接收到的意图


我想你应该看看报警管理器。你可以对它进行编程,定期在你的应用程序中启动一个悬挂式帐篷。我敢打赌这就是你想要的。

而不是广播接收器。您应该使用在特定时间间隔开始的

您可以从


希望它能有所帮助。

即使没有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;
    }

如果您认为您的接收器可能会错过一些消息,不要担心,发送的每一条消息都会被广播接收器接收。它本身就是一个后台服务(线程),是同一任务的一部分。