我在我的 Android 应用程序中实现了一个 BroadcastReceiver
(称为 ProximityIntentReceiver
),但我遇到了一些烦人的问题。在我的 MainActivity
的 onCreate()
方法中,我调用此函数:
addProximityAlert():
private ProximityIntentReceiver proximityIntentReceiver;
private void addProximityAlert() {
pendingIntentList = new HashMap<Integer, PendingIntent>();
double latitude = 37.567072;
double longitude = 14.273046;
Intent intent = new Intent(PROX_ALERT_INTENT);
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
locationManager.addProximityAlert(
latitude, // the latitude of the central point of the alert region
longitude, // the longitude of the central point of the alert region
POINT_RADIUS, // the radius of the central point of the alert region, in meters
PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no expiration
proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected
);
pendingIntentList.put(1, proximityIntent);
proximityIntentReceiver = new ProximityIntentReceiver();
registerReceiver(proximityIntentReceiver, filter);
Toast.makeText(getApplicationContext(),"Alert Added",Toast.LENGTH_SHORT).show();
}
这是我的 MainActivity 的 onDestroy:
onDestroy():
@Override
public void onDestroy() {
super.onDestroy();
accessTokenTracker.stopTracking();
if(proximityIntentReceiver!=null) {
unregisterReceiver(proximityIntentReceiver);
removeProximityAlert();
}
}
removeProximityAlert():
private HashMap<Integer, PendingIntent> pendingIntentList;
private void removeProximityAlert () {
Iterator<Map.Entry<Integer, PendingIntent>> iterator = pendingIntentList.entrySet().iterator() ;
while(iterator.hasNext()){
Map.Entry<Integer, PendingIntent> pendingIntentMap = iterator.next();
locationManager.removeProximityAlert(pendingIntentMap.getValue());
}
}
现在,如果我在 BroadcastReceiver
或 addProximityAlert()
中更改某些内容,更改将保持不变,直到我重新启动设备。为什么?我认为通过调用 unregisterReceiver()
方法足以删除 BroadcastReceiver
的实例...
我应该在代码中添加什么?
最佳答案
一个BroadcastReceiver
仅在执行其 onReceive()
期间存在方法。因此,每次广播被触发/接收时,这都会评估为一个一次性实例。用于动态注册/注销BroadcastReceiver
s,你必须记住 onPause()
中接收者的实例在onResume()
期间再次注册.
@Override
protected void onPause() {
unregisterReceiver(mReceiver);
super.onPause();
}
对于 Activity
:
为了注册您的BroadcastReceiver
首先,在您的应用程序中删除 <receiver>
来自 AndroidManifest.xml 文件的标记。然后,调用registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
在你的onResume()
。使用unregisterReceiver(BroadcastReceiver receiver)
在你的onPause()
取消注册BroadcastReceiver
.
对于Service
:
从 list 文件中删除接收者标签。然后您可以注册您的BroadcastReceiver
使用onCreate()
中的相同方法并在 onDestroy()
中取消注册.
引用来源:1:Unregister broadcast receiver 2:unregister receiver
您可以查看here ,它为您提供有关 BroadcastReceiver
工作的更多详细信息s。
您的问题仍未解决,请告诉我。
关于Android - 如何销毁广播接收器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30029177/