в андроиде сработало оповещение о близости, даже если процесс, который его создал, прекратился? - PullRequest
0 голосов
/ 16 октября 2011

В моем приложении в какой-то момент я создаю предупреждение о близости, как это:

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 * ​​1014 *

1 Ответ

0 голосов
/ 21 октября 2011

Проблема в том, что ваш 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.Не требуется, но существует соглашение о том, чтобы ваши действия относились к вашему приложению.

...