本文介绍了接近警报触发两次?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
接收器:
public class ProximityAlert extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int id = intent.getIntExtra("id", -1); String title = intent.getStringExtra("Title"); Intent showDialog = new Intent(context, ShowMapDialog.class); showDialog.putExtra("id", id); showDialog.putExtra("Title", title); context.startActivity(showDialog); } }ShowMapDialog.java:
ShowMapDialog.java:
public class ShowMapDialog extends Activity { PowerManager.WakeLock wakeLock; AlertDialog alertbox; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); Prefs sp = new Prefs(); int lastplaceid = sp.getLastPlaceID(getApplicationContext()); boolean nopopup = sp.getNoPopup(getApplicationContext()); final int id = extras.getInt("id"); String Title = extras.getString("Title"); Log.d("id+title",id+"+"+Title); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Place of Interest"); if(id != lastplaceid && !nopopup) { wakeLock.acquire(); sp.setLastPlaceID(getApplicationContext(), id); Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); int dot = 200; int dash = 500; int long_gap = 1000; long[] pattern = {0, dash, dot, dash, long_gap}; v.vibrate(pattern, -1); alertbox = new AlertDialog.Builder(ShowMapDialog.this).create(); alertbox.setTitle(getString(R.string.dialogTitle)); alertbox.setMessage(getString(R.string.dialogShowPlaceText1)+Title+getString(R.string.dialogShowPlaceText2)); alertbox.setButton(getString(R.string.dialogShowPlaceYes), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent showPlace = new Intent(getApplicationContext(),Showplace.class); showPlace.putExtra("id", id); startActivity(showPlace); } }); alertbox.setButton2(getString(R.string.dialogShowPlaceNo), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); alertbox.show(); } else if(id != lastplaceid && nopopup){ wakeLock.acquire(); sp.setLastPlaceID(getApplicationContext(), id); Intent showPlace = new Intent(getApplicationContext(),Showplace.class); showPlace.putExtra("id", id); startActivity(showPlace); } else { finish(); } } @Override public void onPause(){ super.onPause(); wakeLock.release(); alertbox.dismiss(); finish(); }}
创建邻近警报:
private void setProximityAlert(String Title, double lat, double lon, float radius, final int id, int requestCode){ // Expiration is x Minutes (x mins * 60secs * 1000milliSecs) long expiration = -1; Intent intent = new Intent(PROXIMITY_INTENT_ACTION); intent.putExtra("id", id); intent.putExtra("Title", Title); PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT); mlocManager.addProximityAlert(lat, lon, radius, expiration, pendingIntent); } public void placeMarkersPoints(){ this.dh = new DataHelper(ShowMap.this); List<Pontos> list = this.dh.selectAll(); markerPlaces = new OverlayPlaces(getResources().getDrawable(R.drawable.marker_places), mapView); for(Pontos p : list){ markerPlaces.addPoint(new GeoPoint(p.getLat(),p.getLng()),p.getName().toString(),Integer.toString(p.getId())); setProximityAlert(p.getName().toString(), p.getLat(), p.getLng(), p.getRadius(), p.getId(), p.getId()); } mapView.getOverlays().add(markerPlaces); mapView.invalidate(); }我这样在onCreate上注册接收器:
I register the receiver on the onCreate like this:
br = new ProximityAlert(); mIntentFilter = new IntentFilter(PROXIMITY_INTENT_ACTION);onPause:
@Override public void onPause() { super.onPause(); mlocManager.removeUpdates(this); unregisterReceiver(br); }onResume:
@Override protected void onResume() { super.onResume(); mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, this); registerReceiver(br, mIntentFilter); }当我执行第二次ProximityAlert时,它将执行两次此代码: Log.d("id + title",id +"+" + Title);
When I go through a second ProximityAlert, it does this code twice: Log.d("id+title",id+"+"+Title);
有什么想法吗?如果需要,我可以发布更多代码:)
Any ideas? If needed, I can post more code :)
推荐答案实际上,我的问题出在BroadcastReceivers上.
Actually my problem was with the BroadcastReceivers.
我正在销毁它们,但不是很正确,因此有时它们会成倍增加或增加三倍,甚至会增加重量.
I was destroying them but not quite correctly, so sometimes they would double, or triple, or w/e.
谢谢,但我自己解决了:)
Thanks but I solved it myself :)
更多推荐
接近警报触发两次?
发布评论