android91 代码注册广播接收者

Activity:

package com.itheima.register;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    private Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intent = new Intent(this, RegisterService.class);
    }


    public void start(View v){
        startService(intent);
    }
    public void stop(View v){
        stopService(intent);
    }
    
}

/*
 服务清单文件注册:
<service android:name="com.itheima.register.RegisterService"></service>*/

service:

package com.itheima.register;

import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;

public class RegisterService extends Service {

    private ScreenReceiver receiver;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //1.创建广播接收者对象
        receiver = new ScreenReceiver();
        //2.创建intent-filter对象
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);//屏幕锁屏
        filter.addAction(Intent.ACTION_SCREEN_ON);//屏幕解锁
        
        //3.注册广播接收者
        registerReceiver(receiver, filter);
        
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        //解除注册
        unregisterReceiver(receiver);
    }
}

广播接收者:

package com.itheima.register;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class ScreenReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();
        if(Intent.ACTION_SCREEN_OFF.equals(action)){
            System.out.println("屏幕关闭");
        }
        else if(Intent.ACTION_SCREEN_ON.equals(action)){
            System.out.println("屏幕打开");
        }
    }

}

#使用代码配置广播接收者,但是服务只能在清单文件注册不能代码注册。
* 可以使用清单文件注册
* 广播一旦发出,系统就会去所有清单文件中寻找,哪个广播接收者的action和广播的action是匹配的,如果找到了,就把该广播接收者的进程启动起来,广播接受者一旦通过清单文件部署在手机就永远生效。
* 可以使用代码注册
* 需要使用广播接收者时,执行注册的代码,不需要时,执行解除注册的代码

###特殊的广播接收者
* 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的
1. 屏幕锁屏和解锁,用的很频繁,因此接收这些广播的接受者不用一直监听。
2. 电量改变

原文地址:https://www.cnblogs.com/yaowen/p/4954435.html