BroadcastReceiver广播接听器的初步认识,动态注册,静态注册(1)

来源:互联网 发布:hdmi矩阵说明书 编辑:程序博客网 时间:2024/05/18 01:09

BroadcastReceiver广播接听器的初步认识,动态注册,静态注册(1)

1、静态注册,在清单文件AndroidMinifest中注册,静态注册的广播只要应用一安装,并且该应用至少启动过一次,该广播会一直有效

2、动态注册,一般在ActivityonCreate()方法中注册,动态注册的广播在Activity停止运行后也将解除注册,这时广播接收器不能继续收到外部发来的广播

清单文件注册:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="project.wgc.mybroadcastreceiver01" >

 

    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/ic_launcher_round"

        android:supportsRtl="true"

        android:theme="@style/AppTheme" >

        <activity android:name=".MainActivity" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

//清单文件注册

        <receiver android:name=".MyBroadcastReceiver">

            <intent-filter>

                <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>

            </intent-filter>

        </receiver>

    </application>

 

</manifest>

 

代码中动态注册:

public classMainActivity extendsAppCompatActivity {
    privateScreenBroadcastReceiver screenBroadcastReceiver;
    @Override
    protected voidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        screenBroadcastReceiver= newScreenBroadcastReceiver();
        IntentFilterintentFilter =new IntentFilter();
        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
        intentFilter.addAction(Intent.ACTION_SCREEN_ON);
        registerReceiver(screenBroadcastReceiver,intentFilter);//动态注册方式
    }

    @Override
    protected voidonDestroy() {
        super.onDestroy();
        unregisterReceiver(screenBroadcastReceiver);//解除注册
    }
}

 

 

自定义两个广播监听器,一个监听电话打进来的MyBroadcastReceiver,一个监听手机锁屏状态的ScreenBroadcastReceiver

具体代码如下:

public classMyBroadcastReceiver extendsBroadcastReceiver {
    @Override
    public voidonReceive(Context context,Intent intent) {
        String resultData = getResultData();
        resultData ="1800" + resultData;//设置在call进来的电话号码前面加上1800.
        setResultData(resultData);
    }
}

 

public classScreenBroadcastReceiver extendsBroadcastReceiver {
    @Override
    public voidonReceive(Context context,Intent intent) {
        if(Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){
            Log.d("weihuan","onReceive: +锁屏");//监听手机锁屏意图
        }else if(Intent.ACTION_SCREEN_ON.equals(intent.getAction())){
            Log.d("weihuan","onReceive: +亮屏");
        }
    }
}

 

监听到的效果图如下:

按下手机的锁屏键测试的结果

ScreenBroadcastReceiver的监听效果

06-02 10:46:23.388 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +锁屏

06-02 10:46:35.925 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +亮屏

06-02 10:46:46.328 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +锁屏

06-02 10:46:53.111 14643-14643/project.wgc.mybroadcastreceiver01 D/weihuan: onReceive: +亮屏

 

电话打进来的MyBroadcastReceiver的效果

 ....无语、、、没测试出来

阅读全文
0 0
原创粉丝点击