我想传递JSON字符串
{"latitude":53.86907815,"longitude":10.66554789,"formatted":"24.04.2015 13:27:49","route":4}
到服务器,所以我想在服务和AlarmManager的帮助下实现它,但我总是在23.04.2015 18:37:49
方法的JSON字符串中获得旧时onHandleintent()
值。 AlramReceiver和AlramService是否正确地在清单中注册?
设置闹钟:
String jSONString = convertToJSON(pLong, pLat, formatted);
Intent aiAutostart = new Intent(getApplicationContext(), AlarmReceiver.class);
aiAutostart.putExtra("json_data", jSONString);
PendingIntent piAutostart = PendingIntent.getBroadcast(getApplicationContext(), TypAutoStart, aiAutostart, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar cal = Calendar.getInstance();
manager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, piAutostart);
AlarmReceiver:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service1 = new Intent(context, PostData.class);
service1 = new Intent(context, PostData.class);
service1.putExtra("Extraname", intent.getStringExtra("Extraname"));
context.startService(service1);
}
}
PostData类:
public class PostData extends IntentService {
public PostData() {
super("someone");
// TODO Auto-generated constructor stub
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent.hasExtra("json_data")) {
String jSONString = intent.getStringExtra("json_data");
System.out.println("Output from onStartCommand " + jSONString);
}
// TODO Auto-generated method stub
}
}
清单部分:
<service android:name=".PostData" />
<receiver android:name=".AlarmReceiver" >
答案 0 :(得分:0)
似乎问题是你用&#34; json_data&#34;创建一个意图?额外的,并通过相同的意图定期呼叫警报管理器以启动您的广播接收器。
在您的活动中,只需使用警报管理器启动接收器/服务,并在接收器/服务中构建JSON模型。在这种情况下,时间和其他一切都将是最新的。
另请注意,您可以绕过接收器并使用警报管理器启动该服务。
final Intent serviceIntent = new Intent(getApplicationContext(), PostData.class);
final PendingIntent i = PendingIntent.getService(getApplicationContext(), 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
答案 1 :(得分:0)
就像Nikis说的那样,你只需要计算一次值,然后每分钟发送一次。
每次你的意图触发时你都要重新计算这些值,所以你需要在BroadcastReceiver中计算它们。
请记住接收器jsut有5秒钟可以工作,所以如果需要更长时间,请让接收器启动Service
并让它进行计算。
答案 2 :(得分:0)
我认为您尝试使用此代码来获取系统当前时间。
Calendar c = Calendar.getInstance();
int seconds = c.get(Calendar.SECOND);
每次都发送给json。