Android:在将JLA字符串传递给intent服务类时,正在更改其中的vlaue

时间:2015-04-24 11:34:36

标签: java android android-intent manifest

我想传递JSON字符串 {"latitude":53.86907815,"longitude":10.66554789,"formatted":"24.04.2015 13:27:49","route":4}

每隔60秒

到服务器,所以我想在服务和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" >

3 个答案:

答案 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。