Android: как узнать имя провайдера местоположения из намерения широковещательной рассылки KEY_STATUS_CHANGED, отправленного LocationManager? - PullRequest
1 голос
/ 11 июля 2010

Я пытаюсь работать с NETWORK и провайдером определения местоположения GPS одновременно. В основной деятельности я регистрирую запрос на обновление местоположения для каждого доступного поставщика:

        for (String provider : m_lm.getProviders(false)) {
            Intent intent = new Intent(GpsMain.this, GpsTestReceiver.class);
            PendingIntent pi = PendingIntent.getBroadcast(GpsMain.this,0, intent, 0);

            m_lm.requestLocationUpdates(provider, 60000, 10, pi);
        }

В моем BroadcastReceiver (GpsTestReceiver) выполните входящие намерения:

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Bundle ex = intent.getExtras();
    if (ex.containsKey(LocationManager.KEY_STATUS_CHANGED)) {
        int status = (Integer)ex.get(LocationManager.KEY_STATUS_CHANGED);
        String str_status;
        switch (status) {
        case 1:
            str_status = "TEMPORARILY_UNAVAILABLE";
            break;
        case 2:
            str_status = "AVAILABLE";
            break;
        default:
            str_status = "OUT_OF_SERVICE";
            break;
        }
        String provider_name = ???;
        s = provider_name+": change status into "+str_status+"\n";
    }

}

Вопрос: как определить, от какого провайдера поступило это намерение? (Строка имя_поставщика = ???;)

Я пытаюсь в момент регистрации включить имя провайдера намерения в качестве полезной нагрузки, например:

                intent.putExtra("local.home.gpstest.PROVIDER", provider);

но безуспешно: входящие намерения от провайдера стирают мои данные ...

1 Ответ

1 голос
/ 11 июля 2010

Я нашел решение. Это было недоразумение, как Android работает с PendingIntents. Действительно, решение с дополнительными полезными данными работает, но если ранее были сделаны некоторые запросы для PendingIntents без данных полезной нагрузки, приложение получит старые намерения без данных полезной нагрузки. Необходимо перезагрузить устройство или сделать новый запрос на PendingIntent с флагом:

            PendingIntent pi = PendingIntent.getBroadcast(GpsMain.this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

После этого входящее намерение будет содержать информацию об имени провайдера.

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