我的应用程序应该将一些数据发送到远程数据库。问题是有时没有可用的互联网连接(例如,没有Wi-Fi和GSM信号)。在这种情况下,我将数据保存在本地存储中,并希望在互联网连接启动时发送它们。
为此,我计划使用AlarmManager和BroadcastReceiver:每隔X分钟调用一次警报并检查接收器中是否有互联网可用。然后,如果互联网可用,我想将延迟数据发送到数据库并删除警报。
在我的主要活动中,我使用此代码设置闹钟
private void setCheckAlarm(){
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
broadcast_intent = new Intent(Context, SendData.class);
pendingIntent = PendingIntent.getBroadcast(Context, 0, broadcast_intent, 0);
// check for internet every 5 minutes, starting for the first time in 1 minute from now
// this intervals only for testing and debug purpose
Calendar now = Calendar.getInstance();
long triggerAtTime = now.getTimeInMillis()+ (1 * 60 * 1000); // 1 minute
long repeat_alarm_every = (1 * 5 * 60 * 1000); // repeat every 5 minutes
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime, repeat_alarm_every, pendingIntent);
}
这里是检查互联网和发送数据的接收器
public class SendData extends BroadcastReceiver {
ConnectivityManager mConnectivity;
@Override
public void onReceive(Context context, Intent intent) {
// if Network connection is OK (Wifi or Mobile) then insert data ...
mConnectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Log.i("SendData", "mConnectivity.getNetworkInfo(0)="+mConnectivity.getNetworkInfo(0));
Log.i("SendData", "mConnectivity.getNetworkInfo(1)="+mConnectivity.getNetworkInfo(1));
if ((mConnectivity.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)||( mConnectivity.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED)) {
Log.i("SendData","Connectivity OK ...");
// insert data from local storage into remote db
// maybe using AsyncTask?
...
// when finished remove alarms and exit
...
} else {
// else exit and wait for next alarm
Log.i("SendData", "No network connection for the moment... will try again later!");
}
};
}
据我了解,另一种可能的方法是使用服务。所以这是我的
问题
谢谢!
答案 0 :(得分:0)
我会考虑使用同步提供程序。这允许用户全局选择退出数据传输,允许您安排同步但仍允许系统在需要时跳过它(低功耗,无连接等)。
There's a good write up on this here。文档通常很难理解,并且示例包含了基本同步提供程序示例中的其他一些内容(即实现您自己的Auth Provider和扩展Contacts,这两者都不需要,听起来像),但是一旦剥离它降到最低,这是相当简单的。