Android AlarmManager和BroadcastReceiver:这是正确的方法吗?(需要每X分钟重复一次任务)

Android AlarmManager和BroadcastReceiver:这是正确的方法吗?(需要每X分钟重复一次任务),android,service,broadcastreceiver,alarmmanager,Android,Service,Broadcastreceiver,Alarmmanager,我的应用程序应该向远程数据库发送一些数据。问题是有时没有可用的internet连接(例如,没有Wi-Fi和GSM信号)。在这种情况下,我将数据保存在本地存储器中,并希望在连接到internet时发送数据 为此,我计划使用AlarmManager和BroadcastReceiver:每X分钟调用一次警报,并检查接收器中是否有internet可用。然后,如果互联网可用,我想向数据库发送延迟数据并删除警报 在我的主要活动中,我使用此代码设置报警 private void setCheckAlarm()

我的应用程序应该向远程数据库发送一些数据。问题是有时没有可用的internet连接(例如,没有Wi-Fi和GSM信号)。在这种情况下,我将数据保存在本地存储器中,并希望在连接到internet时发送数据

为此,我计划使用AlarmManager和BroadcastReceiver:每X分钟调用一次警报,并检查接收器中是否有internet可用。然后,如果互联网可用,我想向数据库发送延迟数据并删除警报

在我的主要活动中,我使用此代码设置报警

private void setCheckAlarm(){
alarmManager=(alarmManager)getSystemService(报警服务);
广播意图=新意图(上下文,SendData.class);
PendingEvent=PendingEvent.getBroadcast(上下文,0,广播意图,0);
//每5分钟检查一次互联网,从现在起1分钟内第一次开始
//此间隔仅用于测试和调试目的
Calendar now=Calendar.getInstance();
long triggeratime=now.getTimeInMillis()+(1*60*1000);//1分钟
长时间重复报警间隔=(1*5*60*1000);//每5分钟重复一次
alarmManager.setRepeating(alarmManager.RTC_WAKEUP,triggerAtTime,repeat_alarm_every,PendingEvent);
}
这是一个接收器,用于检查互联网并发送数据

公共类SendData扩展广播接收器{
连接管理器mConnectivity;
@凌驾
公共void onReceive(上下文、意图){
//如果网络连接正常(Wifi或移动),则插入数据。。。
mConnectivity=(ConnectivityManager)context.getSystemService(context.CONNECTIVITY_服务);
Log.i(“SendData”、“mConnectivity.getNetworkInfo(0)=”+mConnectivity.getNetworkInfo(0));
Log.i(“SendData”、“mConnectivity.getNetworkInfo(1)=”+mConnectivity.getNetworkInfo(1));
如果((mConnectivity.getNetworkInfo(0).getState()==NetworkInfo.State.CONNECTED)| |(mConnectivity.getNetworkInfo(1.getState()==NetworkInfo.State.CONNECTED)){
Log.i(“发送数据”,“连接正常…”);
//将数据从本地存储插入远程数据库
//也许使用异步任务?
...
//完成后,移除警报并退出
...
}否则{
//否则退出并等待下一个警报
Log.i(“SendData”,“暂时没有网络连接…稍后将重试!”);
}
};
}
据我所知,另一种可能的方法是使用服务。这是我的

问题

  • 这是正确的方法吗
  • 是否可以从接收器上移除警报?如果是,我怎么做
  • 我应该在receiver中使用AsyncTask发送数据,还是可以从主循环发送数据

  • 谢谢

    >我会考虑使用同步提供程序。这允许用户全局选择退出数据传输,允许您安排同步,但如果需要,仍允许系统跳过同步(低功耗、无连接等)


    。文档通常很难理解,本示例将一些其他内容与基本同步提供程序示例结合起来(即实现您自己的身份验证提供程序和扩展联系人,听起来您不需要这两种功能),但一旦将其精简到最低限度,就相当简单了。

    谢谢,但这似乎与我的用例有点不同。我不需要同步用户信息,我需要将新数据发送到远程数据库。同步提供程序不需要是用户信息。它是任何需要与非现场数据源同步的东西。您可以决定“同步”的含义。它可以很容易地被推。