在我的应用程序中,我在某些时候创建了一个接近警报:
m_LocationManager.addProximityAlert(lat, lon, radius, PROXMITY_ALERT_EXPIRATION_TIME, m_PendingIntent);
在某个时刻,我的应用程序的进程被android终止了,我实现了这两个方法:
public void onSaveInstanceState(Bundle savedInstanceState)
public void onRestoreInstanceState(Bundle savedInstanceState)
但是我的警报没有触发…我的猜测是,我需要将创建警报的代码移动到服务中。
这是设置警报的代码:
IntentFilter intentFilter = new IntentFilter("PROX_ALERT_INTENT");
m_NotificationAlertReciever_BroadcastReciever = new NotificationAlertReciever_BroadcastReciever(m_myLocationListener, this);
registerReceiver(m_NotificationAlertReciever_BroadcastReciever, intentFilter);
Intent intent = new Intent("PROX_ALERT_INTENT");
intent.putExtra("lat", lat);
intent.putExtra("lng", lon);
intent.putExtra("place", place);
m_PendingIntent = PendingIntent.getBroadcast(this, -1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
this.m_LocationManager.addProximityAlert(lat, lon, radius, PROXMITY_ALERT_EXPIRATION_TIME, m_PendingIntent);
有没有人同意或者给出其他建议?
提前感谢,Amitos80
问题是您的BroadcastReceiver
是通过使用registerReceiver
从您的活动中动态创建的。
如果你想让你的进程在接近警报触发时重新启动,那么你必须在AndroidManifest
中声明接收器,像这样:
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="PROX_ALERT_INTENT/>
</intent-filter>
</receiver>
现在,当接近警报被触发时,如果进程不存在,它将被启动,MyBroadcastReceiver.onReceive
将被调用。
注意,使用<receiver>
标签这样是不可能的,如果你的接收者被定义为一个嵌套类在你的活动(这通常是这样做的,所以接收者有直接访问活动中的方法和数据)。对于一个独立的接收器,你几乎只能显示一个通知或启动一个服务。
还需要注意的是,PROX_ALERT_INTENT
动作应该包含应用程序包作为前缀,例如my.app.PROX_ALERT_INTENT
。这不是必需的,但这是一种惯例,让你的操作特定于你的应用。