Как использовать метод registerReceiver?

Я хочу использовать динамически зарегистрированный BroadcastReceiver , который имеет ссылку на Activity , поэтому он может изменять свой пользовательский интерфейс. Я использую метод Context.registerReceiver () , но метод получателя onReceive () никогда не вызывается.

Вот пример кода, показывающий проблему:

package com.example;

import android.app.Activity;
import android.app.IntentService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;

public class RegisterBroadcastReceiver extends Activity {

    public static class MyIntentService extends IntentService {

        public MyIntentService() {
            super(MyIntentService.class.getSimpleName());
        }

        @Override
        protected void onHandleIntent(Intent intent) {
            Intent i = new Intent(this, MyBroadcastReceiver.class);
            sendBroadcast(i);
        }
    }

    public class MyBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(MyBroadcastReceiver.class.getSimpleName(),
                  "received broadcast");
        }

    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();

    @Override
    protected void onResume() {
        super.onResume();

        IntentFilter intentFilter = new IntentFilter();
        registerReceiver(mReceiver, intentFilter);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU) {
            Intent i = new Intent(this, MyIntentService.class);
            startService(i);
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mReceiver);
    }

}
45
задан naXa 30 June 2014 в 20:43
поделиться