требуется помощь с BroadcastReceiver - PullRequest
2 голосов
/ 25 августа 2011

По сути, моя проблема заключается в том, что мне нужно отправить данные из моей службы (начатой ​​с Intent) в основную деятельность. (это моя первая попытка использования BroadcastReceiver)

У меня есть два приложения: com.example.myapp (содержит основное действие) и com.example.myapp.licence (содержит фоновый сервис)

То, что у меня сейчас есть, выглядит следующим образом:

com.example.myapp> MainActivity:

// Start background service
Intent intent = new Intent();
intent.setClassName("com.example.myapp.licence", "com.example.myapp.licence.LicenceCheck");
startService(intent);

// Setup BroadcastReceiver 
private BroadcastReceiver MyBroadcastReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        String status = extras.getString("status");
    }
};

//  Start reciever
IntentFilter filter = new IntentFilter("STATUS_RETURN");
registerReceiver(MyBroadcastReceiver, filter);

com.example.myapp.licence> LicenceCheck:

Intent intentToActivity = new Intent("STATUS_RETURN");
intent.putExtra("status", "verified");
sendBroadcast(intentToActivity);

Может кто-нибудь предложить, что мне нужно изменить, чтобы этот BroadcastReceiver работал?

EDIT : Отредактировано для исправления опечатки .. проблема все еще существует

РЕДАКТИРОВАТЬ 2 : Теперь кажется, что BroadcastReciever используется, но есть проблема со следующей строкой (поскольку она принудительно закрывается):

String status = extras.getString("status");

РЕДАКТИРОВАТЬ 3 : Вышеуказанная проблема решена путем окружения этой строки следующим IF-статусом:

if (extras != null)

но "статисты" всегда бывают нулевыми, кто-нибудь знает почему?

Ответы [ 4 ]

2 голосов
/ 25 августа 2011

Я думаю, что несовпадающие "STATUS_REUTRN" и "STATUS_RETURN" как-то связаны с этим?

Обновление

Похоже, у вас проблемы с Intentразрешение (прокрутка экрана вниз).Намерение может быть одним из:

  • Явное намерение - целевой класс должен быть определен с помощью setClass().

  • Неявное намерение - должно быть достаточно информации для разрешения: тип, действие, категория.

Поэтому, если возможно, добавьте это в свое намерение вещания:

intentToActivity.setClassx(this, com.example.myapp.MainActivity.class);
0 голосов
/ 26 августа 2011

После долгих лет испытаний я наконец-то нашел проблему.

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

Оригинал: intent.putExtra («статус», «проверено»);

Правильно: intentToActivity.putExtra ("статус", "подтвержден");

Еще раз спасибо за помощь всем

0 голосов
/ 25 августа 2011

Я использую AIDL для достижения этой цели. Это позволяет передавать данные между вашим сервисом и деятельностью. http://developer.android.com/guide/developing/tools/aidl.html

Это многому нужно научиться, но это лучший из известных мне способов достижения этого.

0 голосов
/ 25 августа 2011

Измените видимость приемника вещания на public.

, чтобы запустить свой сервис как

startService(new Intent(getApplicationContext(), com.example.myapp.licence.LicenceCheck.class));
...