悬浮者继续缓存相同的物体
-
29-09-2019 - |
题
我一直面临一些问题,试图通过意图并将目的传递给广播员,这是关于接近性警报的问题。更具体地说,正在尝试通过一个对象,其中包括用户不断变化的位置。我尝试在这里(而不仅)提出了各种策略,但没有任何策略可行,导致无效的值或在广播员方面检索到意图时,是无效的。使用的战术:
- 标记带有以下对象的意图:flag_activity_new_task+flag_activity_clear_top+flag_activity_single_top结果:broadacastreceiver的null值
- 标记使用初始意图创建的悬而未决的意图,wlag_update_current或flag_cancel_current结果:broadacastreceiver侧面的null值
- 使用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);
}
设置意图过滤器并注册广播的调用方法的代码:
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(){
}
}
任何想法都将受到欢迎。先感谢您。
解决方案
嗯,我想我找到了一些东西:
我放置了用于检测同一类(mycartracking.class)的邻近警报的Broadcastreceiver(proximityAlerreceiver),位于locationListener.class所在的位置。这可以立即访问新的位置更新,从而创建了一种新的意图,包裹在新的悬浮物中,以向广播员发射(仅在满足接近标准时)。标志:flag_activity_new_task+flag_activity_single_top和flag_cancel_current on Intent和pendingIntent分别保留。进一步来说:
LocationListener的代码:
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);//update application based on new location
}
public void onProviderDisabled(String provider){
updateWithNewLocation(null);//update application if provider disabled
}
public void onProviderEnabled(String provider){
// Update application if provider enabled
}
public void onStatusChanged(String provider, int status, Bundle extras){
//update application if provider hardware status changed
}
};
setProximityAlert()方法的代码:
private void setProximityAlert() {
String locService = Context.LOCATION_SERVICE;
Context context =getApplicationContext();
LocationManager locationManager;
locationManager = (LocationManager)getSystemService(locService);
float radius = myCar.getMyCarRadius();
long expiration = myCar.getMyCarExpiration();
Intent intent = new Intent(CAR_DISCOVERED);
intent.putExtra("myCar",myCar);
locationManager.getLastKnownLocation(provider);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//flagging intent
PendingIntent proximityIntent = PendingIntent.getBroadcast(context, -1, intent, PendingIntent.FLAG_CANCEL_CURRENT);//flagging pendingIntent
locationManager.addProximityAlert(myCar.getMyCarLat(), myCar.getMyCarLng(), radius, expiration, proximityIntent);//setting proximity alert
}
该解决方案可在新的位置更新中产生新的意图。谢谢大家的帮助和您的兴趣:)
其他提示
尝试添加intent.setdata(uri);乌里是每个待处理意图的独特价值
我也一直在努力解决这个问题。我花了整整整夜才发现我遇到的一个怪异的错误与这个问题有关。
这是有关该主题的Google代码的一个很好的讨论: http://groups.google.com/group/android-developers/browse_thread/thread/thread/b2060b27c8934921
我通过(AB)使用setData中的uri和pendingevent.get whate的(保留)请求代码解决了所有问题。
我还在我的意图上使用flag_cancel_current,并确保只有共享相同目的的悬浮物获得相同的数据,操作和URI。
希望它有所帮助。