Приемник вещания Android - PullRequest
       2

Приемник вещания Android

0 голосов
/ 26 марта 2011

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

Мой сценарий использования:

Когда начинается действие "TestApp", он должен активировать приемник вещания "Receiver", этот запускает другое действие "Main", которое определено в том же манифесте.

Вот различие получателя в моем манифесте xml

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="stas.test.intent.action.blablub"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
        <receiver android:name=".Receiver"
        android:enabled="true">
            <intent-filter>
                <action android:name="stas.test.intent.action.myreceiver"/>
            </intent-filter>
        </receiver>
    </activity>

</application>

это действие, которое должно быть запущено получателем:

action android:name="stas.test.intent.action.blablub" (Main.java)

Вот код получателя

public class Receiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent newIntent = new Intent();
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        newIntent.setAction("stas.test.intent.action.blablub");
        newIntent.addCategory("android.intent.category.DEFAULT");
        System.out.println("dd");
        context.startActivity(newIntent);
    }
   }

и вот инициирующее действие, которое вызывает получателя

public class TestApp extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = new Intent();
        intent.setAction("stas.test.intent.action.myreceiver");
        getApplicationContext().sendBroadcast(intent);
    }
}

Когда я запускаю TestApp, Receiver никогда не запускаетсяи Main тоже нет.

Ответы [ 3 ]

4 голосов
/ 26 марта 2011

Не проверял это, но разве получатель не должен быть дочерним узлом приложения?

    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="stas.test.intent.action.blablub"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    <receiver android:name=".Receiver"
        android:enabled="true">
            <intent-filter>
                <action android:name="stas.test.intent.action.myreceiver"/>
            </intent-filter>
    </receiver>

</application>
2 голосов
/ 24 октября 2013

Во-первых, вы должны (не) зарегистрировать получателя в onStart / onStop:

 @Override
    public void onStart() {
        super.onStart();

      registerReceiver(mBroadcastReceiver,                new IntentFilter("your name"));
    }

И тогда вы можете вызвать Activity, используя PeddingIntent

 Intent intent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

PS, вы можете использовать Log вместо System.out.println.

0 голосов
/ 02 октября 2014
It is better to register and unregister broadcast receiver on activity resume and pause.
@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onPause();
        this.registerReceiver(this.mReceiver);
    }
@Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        //unregister our receiver
        this.unregisterReceiver(this.mReceiver);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...