在android接近警报触发,即使创建它的进程终止



在我的应用程序中,我在某些时候创建了一个接近警报:

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。这不是必需的,但这是一种惯例,让你的操作特定于你的应用。

相关内容

  • 没有找到相关文章

最新更新