У меня возникли некоторые проблемы с попыткой передать данные по намерениям и в ожидании намерений BroadcastReceiver относительно предупреждений о близости. В частности, я пытаюсь передать объект, который, среди прочего, содержит постоянно меняющуюся позицию пользователя. Я пробовал различные тактики, предлагаемые здесь (и не только), но никто не работал, в результате чего были получены либо нулевые значения, либо те же, что и в первый раз, когда намерение было получено на стороне BroadcastReceiver. Тактика используется:PendingIntents сохраняют кеширование одного и того же объекта
- Отметки намерения, который несет объект с: FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP Результат: Нулевые значения на стороне BroadacastReceiver в
- слабеющех ожидающее намерение, созданное с использованием первоначального намерения, с: FLAG_UPDATE_CURRENT или FLAG_CANCEL_CURRENT Результат: Нулевые значения на стороне BroadacastReceiver
- Приобретение случайного идентификатора для намерения или ожидающего намерения с использованием System.currentTimeMillis(); Результат: намерения не срабатывают или не принимаются вообще
- Ничего не описано выше. Результат: получение одного и того же начального значения каждый раз.
код для метода вызова (лишен каких-либо экспериментов/получения нулевых значений):
private void setProximityAlert(MyCar myCar) {
String locService = Context.LOCATION_SERVICE;
LocationManager locationManager;
locationManager = (LocationManager)getSystemService(locService);
float radius = myCar.getMyCarRadius();
long expiration = myCar.getMyCarExpiration();
myService.setMyDriverLat(userLat);//setting user's position
myService.setMyDriverLng(userLng);//setting user's position
Intent intent = new Intent(myCar.getMyCarName());
intent.putExtra("myCar",myCar);
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, -1, intent, 0);
locationManager.addProximityAlert(myCar.getMyCarLat(), myCar.getMyCarLng(), radius, expiration, proximityIntent);
}
код для метода вызова, который устанавливает фильтр намерений и регистрирует BroadcastReceiver:
public void addNewCarPoint (MyCar myCar){
IntentFilter filter = new IntentFilter(myCar.getMyCarName());
registerReceiver(new ProximityAlertReceiver(), filter);
setProximityAlert(myCar);
}
Код для трансляцииПользовательская ссылка:
public class ProximityAlertReceiver extends BroadcastReceiver {
@Override
public void onReceive (Context context, Intent intent) {
MyCar myCar=(MyCar)intent.getParcelableExtra("myCar");
driverLoc=(String)Double.toString(myCar.getMyDriverLat());
Toast.makeText(context, userLoc, Toast.LENGTH_SHORT).show();
Intent i = new Intent(context, MyCarDiscoveryPrompt.class);
context.startActivity(i);//firing intent
}
public void intentDataLoader(){
}
}
Любые идеи были бы более чем приветствуются. Спасибо заранее.
Я тоже пробовал это, но, похоже, это также относится к третьей тактике, описанной выше, без каких-либо намерений, которые были уволены или получены:/ – nifo 2010-12-05 23:49:16