最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

android BroadcastReceiver广播接收者入门案例

Android 太平洋学习网 浏览 评论

android BroadcastReceiver广播接收者是android四大组件之一,通常用于监听系统的变化情况,比如网络连接和电池电量变化,或者用户离线上线之后及时更改用户在线离线状态等等。

BroadcastReceiver广播接收者原理:当用户或系统需要发送某个intent信息时,它必须给接收信息者一个action标识,然后系统filter监听到这个action的标识之后会根据name="xxx"的用户来处理相关的广播信息。

android BroadcastReceiver分为静态注册和动态注册,在开发中动态注册会比较常见一点,静态注册适合于发送广播信号给所有的用户,例如弹出一个新闻广告,不管你在app的哪个页面你都会看到这个广告,而Broadcast Receiver动态注册就比较适合于针对某个Activity页面发送广播信号,比如有人给我发消息,app右下角马上会出现一个红色的标识,提醒我有多少条消息没有阅读等等。

下面来分别使用静态和动态的方式注册广播接收者,如下。

公共部分代码:在activity_main.xml界面中添加一个发送broadcast消息的button按钮,代码如下。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.baidu.broadcastdemo.MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送广播消息"
        android:onClick="sendBroadcast"/>
</RelativeLayout>

案例一:静态注册Broadcast Receiver。

1:MainActivity.java中实现sendBroadcast点击事件,用于发送一个广播信息。

package com.baidu.broadcastdemo;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //发送broadcast广播的事件
    public void sendBroadcast(View view){
        Intent intent = new Intent();
        //intent给消息接收者携带消息
        intent.putExtra("mykey","我是发送过来的消息");
        intent.setAction("com.baidu.MY_BROADCAST");
        sendBroadcast(intent);
    }
}

2:在AndroidManifest.xml文件中的<application></application>之间加入broadcast广播接收者的监听配置,并指定名为MyReceiver的类来接收发送的广播消息,配置如下。

<receiver android:name=".MyReceiver">
  <intent-filter>
     <action android:name="com.baidu.MY_BROADCAST"></action>
  </intent-filter>
</receiver>

3:MyReceiver类必须要继承BroadcastReceiver类,实现MyReceiver类中的onReceive()方法,并弹出所接收到的消息,代码如下。

public class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg = intent.getStringExtra("mykey");
        Toast.makeText(context,"静态收到:"+msg,Toast.LENGTH_SHORT).show();
    }
}

4:静态注册运行后的效果如图所示,注意提示消息的区别。

GIF1.gif

案例二:动态注册Broadcast Receiver,不需要在AndroidManifest.xml文件中配置filter过滤器,也不需要指定处理的类是谁,只需要在需要接收消息界面的onCreate()方法中动态注册broadcast receiver就可以了,本案例是在当前页自己发送自己接收,开发中自己根据实际情况。

package com.baidu.broadcastdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    //自定义的动态广播接收者
    private DynamicReceiver dynamicReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建过滤器
        IntentFilter filter = new IntentFilter();
        //添加监听的name标识
        filter.addAction("com.baidu.MY_BROADCAST");
        dynamicReceiver = new DynamicReceiver();
        //注册广播接收者
        registerReceiver(dynamicReceiver,filter);
    }
    //发送broadcast广播的事件
    public void sendBroadcast(View view){
        Intent intent = new Intent();
        //intent给消息接收者携带消息
        intent.putExtra("mykey","我是发送过来的消息");
        intent.setAction("com.baidu.MY_BROADCAST");
        sendBroadcast(intent);
    }
    class DynamicReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            String msg = intent.getStringExtra("mykey");
            Toast.makeText(context,"动态收到:"+msg,Toast.LENGTH_SHORT).show();
        }
    }
}

运行之后如图所示。

GIF2.gif

 

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/2017/0911/213.html

    与本文相关的文章

    发表我的评论
    取消评论

    表情

    您的回复是我们的动力!

    • 昵称 (必填)

    网友最新评论