0

在我的应用程序中,有时我会创建一个接近警报,如下所示:

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

有人可以批准或提供其他建议。

提前致谢, Amidos80

4

1 回答 1

1

问题是您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. 不是必需的,但惯例是让您的操作特定于您的应用程序。

于 2011-10-20T21:59:13.933 回答