Carr的Android笔记

博文都是在版主学习Android过程中遇到的问题

Android广播(BroacastReceiver)

BroadcastReceiver可以理解成是一种组件,是默默的在改后台运行的,用于在不同软件和不同组件之间的传递,无法被用户感知,因为他在系统的内部工作,BroadcastReceiver被称为广播。

  一、广播的注册有两种方式: 

    1、动态注册,使用Java代码进行注册

    2、静态注册,需要在AndroidMainfest进行注册

  二、我们先来讲解下如何静态注册:

    1、我们先来创建一个继承BroadcastReceiver的类,实现onReceive方法,为了更好的体验,我们在这个方法里面弹一个吐司

     onReceive在接受到广播后会触发

public class MsgService extends BroadcastReceiver {

    private String ACTION_SGC = "android.intent.action.BOOT_COMPleTED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if(ACTION_SGC.equals(intent.getAction())){
            Toast.makeText(context,"静态广播",Toast.LENGTH_SHORT).show();
        }
    }
}

2、这是需要在AndroidMainfest中进行注册

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
    
    <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=".MsgService">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPleTED"></action>
            </intent-filter>
        </receiver>
    </application>

注册的代码是在17行到20行,别忘了还要写上权限,权限就是第一个行的权限

    3、如何使用广播

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里的意图必须使用和其他一样的意图android.intent.action.BOOT_COMPleTED 如果使用的不一样,将会出现错误
                sendBroadcast(new Intent("android.intent.action.BOOT_COMPleTED"));
            }
        });
    }
}

二、动态注册广播

    1、所谓动态注册广播,就是使用Java代码随时可以注册广播

    同样动态注册广播也是需要继承BroadcastReceiver的类,实现onReceive方法,

public class Servicesgc extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"接收到广播",Toast.LENGTH_SHORT).show();
    }
}

2、动态注册不需要在AndroidMainfest进行注册

  3、在MainActivity中使用


public class MainActivity extends AppCompatActivity {

    private Servicesgc servicesgc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        servicesgc = new Servicesgc();

        findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                init();
            }
        });

        findViewById(R.id.send_gb).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送广播
                sendBroadcast(new Intent("android.net.conn.CONNECTIVITY"));
            }
        });
    }

    private void init() {
        //注册广播
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY");
        registerReceiver(servicesgc,filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //根据软件的生命周期解除广播
        unregisterReceiver(servicesgc);
    }
}

 以上就是Android广播的详解      

阅读更多
版权声明:转载请注明本文链接 https://blog.csdn.net/qq_31844349/article/details/80330235
文章标签: Android 广播
个人分类: Android
想对作者说点什么? 我来说一句

Android组件通信与广播消息

2010年12月09日 955KB 下载

没有更多推荐了,返回首页

不良信息举报

Android广播(BroacastReceiver)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭