Почему мое приложение для Android не отвечает на события Location? - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть приложение для Android, и я сейчас играю с LocationManager, сейчас пытаюсь получить базовую функциональность. Проблема в том, что когда я отправляю ему событие Location, либо через DDMS (Eclipse), либо через telnet-соединение с эмулятором и используя «geo», я не получаю никакого ответа. У меня есть мой код ниже, может кто-нибудь помочь мне понять, что я делаю неправильно? Спасибо.

public class HelloLocation extends Activity {
Toast mToast;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Intent intent = new Intent(HelloLocation.this, HelloLocationReceiver.class);
        PendingIntent sender = PendingIntent.getBroadcast(HelloLocation.this, 0, intent, 0);

        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.addProximityAlert(40.000, -74.000, 2500, -1, sender);   


        if(mToast != null) {
             mToast.cancel();
        }
        mToast = Toast.makeText(HelloLocation.this, "Alarm set", Toast.LENGTH_LONG);
        mToast.show();
    }
}

и мой класс, который должен отвечать на событие Location:

public class HelloLocationReceiver extends BroadcastReceiver {

    @Override public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Alarm set off", Toast.LENGTH_LONG).show();
    }
}

1 Ответ

3 голосов
/ 01 февраля 2011

Вам необходимо зарегистрировать получателя и определить фильтр намерений, попробуйте это:

public class HelloLocation extends Activity {
   Toast mToast;
   // ADD LINE BELOW
   private static final String PROXIMITY_ALERT_INTENT = "AnythingYouLike";
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

      // DELETE LINE BELOW
      //Intent intent = new Intent(HelloLocation.this, HelloLocationReceiver.class);
      // REPLACE WITH LINE BELOW
      Intent intent = new Intent(PROXIMITY_ALERT_INTENT);

      PendingIntent sender = PendingIntent.getBroadcast(HelloLocation.this, 0, intent, 0);

      LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
      lm.addProximityAlert(40.000, -74.000, 2500, -1, sender);   

      // ADD TWO LINES BELOW
      IntentFilter filter = new IntentFilter(PROXIMITY_ALERT_INTENT);
      registerReceiver(new HelloLocationReceiver(), filter);
      // ------------------------

      if(mToast != null) {
         mToast.cancel();
      }
      mToast = Toast.makeText(HelloLocation.this, "Alarm set", Toast.LENGTH_LONG);
           mToast.show();
  }

}

Это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...