Приемник широковещания onReceive () никогда не вызывается - PullRequest
5 голосов
/ 20 марта 2012

Я получаю эту проблему в ICS, но не в предыдущих версиях:

Из приложения 1 я отправляю трансляцию и пытаюсь получить ее в приложении 2. Но onReceive никогда не вызывается в действиях приложения 2.

Я не могу понять, что это за блок onReceive от вызова, хотя я все правильно указал.

Сначала я запускаю BroadcastReceive, а затем BroadcastSend

Любая помощь, которая поможет мне решить эту проблему, очень ценится.

Активность отправки приложения 1

public class BroadcastSend extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent i = new Intent();
    i.setAction("edu.ius.rwisman.custom.intent.action.TEST");
    i.putExtra("url","ww.ius.edu");
    sendBroadcast(i);
}

Приложение 2 получает активность

public class BroadcastReceive extends BroadcastReceiver{
// Display an alert that we've received a message.    
@Override 
public void onReceive(Context context, Intent intent){
    System.out.println("Inside onReceive");
    String url = intent.getExtras().getString("url");
    Toast.makeText(context, "BroadcastReceive:"+url, Toast.LENGTH_SHORT).show();
  }

Манифест приложения 2

<?xml version="1.0" encoding="utf-8"?>

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <receiver android:name="edu.ius.rwisman.BroadcastReceive.BroadcastReceive" android:enabled="true" android:exported="true"> 
        <intent-filter>
            <action android:name="edu.ius.rwisman.custom.intent.action.TEST"/>
        </intent-filter>
    </receiver>
</application>

1 Ответ

10 голосов
/ 20 марта 2012

В ICS вы не будете получать трансляции, пока ваше приложение не будет запущено вручную хотя бы один раз. В Android 3.1+ приложения находятся в остановленном состоянии, если они никогда не запускались или были принудительно остановлены.Система исключает эти приложения из намерений вещания.Они могут быть включены с помощью флага Intent.FLAG_INCLUDE_STOPPED_PACKAGES, как это ..

i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
...