2

В основном, моя проблема в том, что мне нужно отправить данные с моего сервиса (начатого с Intent) в мою основную деятельность. (Это моя первая попытка с помощью BroadcastReceiver)Помощь нужна с 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: Отредактированный, чтобы исправить опечатку ..problem все еще существует

EDIT 2: Теперь Тереза ​​кажется теперь, что BroadcastReciever используется, но проблема со следующей строки (как это сила закрывает на нее):

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

EDIT 3: Над проблемой фиксируется окружающих эту линию с Фолля задолженность по ИД:

if (extras != null) 

но «дополнительные услуги», как представляется, всегда равны нулю, любой знает почему?

+0

где вы регистрируете ресивер? – Ronnie

+0

Успешно ли запущена ваша служба? – Ronnie

+0

состоит в том, что эти две строки: 'code'IntentFilter filter = new IntentFilter (" STATUS_RETURN "); \t \t \t registerReceiver (MyBroadcastReceiver, filter); 'Code' ?? Если это так, у меня есть внутри функции (если это то, что их вызвало в java), которое вызывается onStart() моего MainActivity – 92Jacko

ответ

2

Я думаю, что несоответствие «STATUS_REUTRN» и «STATUS_RETURN» как-то связано с этим?

Update

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

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

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

Так что, если возможно, добавьте это к вашему широковещательного намерения:

intentToActivity.setClassx(this, com.example.myapp.MainActivity.class); 
+0

oh, это было глупо от меня xD, спасибо за указание на эту ошибку, но ее все еще не работает): – 92Jacko

+0

Кроме того, вы используете 'intentToActivity = new ..' и на линии позже' intent.putExtra ("status" , "проверено"). Опечатка? –

+0

Я получаю сообщение об ошибке при попытке использовать getClass(), который предлагает заменить его getClassName(), который не исправляет проблему:/ – 92Jacko

0

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

начать обслуживание как

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

все еще не работает): но спасибо за ответ – 92Jacko

+0

вы очистили сборку? – Ronnie

+0

Да, проблема сохраняется. – 92Jacko

0

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

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

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

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

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

+0

Вы проигнорировали комментарии Питера Кнего. Он указал это 13 часов назад. – Ronnie

+0

О, D: Я никогда не игнорировал это, я не понимал, о чем сначала указывал комментарий:/Я буду отмечать его как правильный ответ – 92Jacko