接近警报触发两次?

编程入门 行业动态 更新时间:2024-10-24 18:17:35
本文介绍了接近警报触发两次?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

接收器:

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 :)

更多推荐

接近警报触发两次?

本文发布于:2023-11-27 13:01:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1638185.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两次   警报

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!