Я столкнулся с некоторыми проблемами при попытке передать данные через намерения и ожидающие намерения в BroadcastReceiver, касающиеся оповещений о близости. Более конкретно, я пытаюсь передать объект, который среди прочего удерживает пользователя постоянно меняющейся позиции. Я пробовал различные тактики, предлагаемые здесь (и не только), но ни одна из них не работала, что приводило либо к нулевым значениям, либо к таким же, как при создании впервые, когда намерение извлекается на стороне BroadcastReceiver. Используемая тактика:
- Пометка намерения, несущего объект, с помощью: 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);
}
Код для стороны BroadcastReceiver:
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(){
}
* *} Тысяча двадцать-один
Любые идеи будут более чем приветствоваться.
Заранее спасибо.