我一直在面临一些问题,试图通过意图和未决意图传递数据到BroadcastReceiver,关于接近警报。更具体地说,我试图传递一个对象,其中包括用户不断变化的位置。我尝试过在这里提出的各种策略(而不仅仅是),但都没有工作,导致无论是空值还是与第一次创建的意图相同,当意图在BroadcastReceiver一侧检索时。战术使用:PendingIntents保持缓存相同的对象
- 检举与承载对象的意图:FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP 结果:在BroadacastReceiver侧Null值
- 检举使用初始意图,使用创建的未决意图:FLAG_UPDATE_CURRENT或FLAG_CANCEL_CURRENT 结果:在BroadacastReceiver一侧的空值
- 使用System.currentTimeMillis()获取意图或等待意图的随机ID; 结果:内容不会被解雇或收到
- 上面没有描述。结果:每次都检索相同的初始值。
代码调用方法(来自任何性实验剥离/产生空值):
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(){
}
}
任何想法都会更受欢迎。 预先感谢您。
我也试过,但它似乎也落在上面描述的第三种策略,没有意图被解雇或收到:/ – nifo 2010-12-05 23:49:16