Android BroadcastReceiver 的简单应用

Android BroadcastReceiver 的简单应用

1.广播接收器注册一共有两种形式 : 静态注册和动态注册.

两者及其接收广播的区别:
1.动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

2.当广播为有序广播时:
1 优先级高的先接收
2 同优先级的广播接收器,动态优先于静态
3 同优先级的同类广播接收器,静态:先扫描的优先于后扫描的,动态:先注册的优先于后注册的。

3当广播为普通广播时:
1 无视优先级,动态广播接收器优先于静态广播接收器
2 同优先级的同类广播接收器,静态:先扫描的优先于后扫描的,动态:先注册的优先于后注册的。

2.静态注册广播接收器

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <Button
        android:id="@+id/rec"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="rec" />

</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.demo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.demo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 静态注册广播 -->
        <receiver 
            android:name=".BroadReceiver">     
        </receiver>
    </application>

</manifest>

Mainacticity.java

package com.demo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
    private Button btnsend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnsend = (Button) findViewById(R.id.btnsend);
        btnsend.setOnClickListener(this);
    }
    public void onClick(View v){
        switch (v.getId()) {
        case R.id.btnsend:
            Intent intent = new Intent(this,BroadReceiver.class);
            intent.putExtra("res", "你好.我发送了一条广播");
            sendBroadcast(intent);
            break;
        }
    }
}

定义一个类继承广播接收器BroadcastReceiver,并处理发送过来的事情

package com.demo;

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

public class BroadReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String str = intent.getStringExtra("res");
        System.out.println("接收到了消息::"+str);
    }

}

3.动态注册广播接收器

在这里我们在一个输入框中输入字符在文本框显示,首先先输入文本,在点击注册,然后在点击发送,即可看到文本更行了,说明广播起作用了,通知到位.
MainActrivity.java代码

package com.demo;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
    private Button btnsend,btnreg,btnunreg;
    private TextView tvtext;
    private EditText edText;
    public static final String ACTION_ZDY = "demo.broad";
    public BroadcastReceiver receiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnsend = (Button) findViewById(R.id.btnsend);
        btnreg = (Button) findViewById(R.id.btnreg);
        btnunreg = (Button) findViewById(R.id.btnunreg);
        tvtext = (TextView) findViewById(R.id.tvtext);
        edText = (EditText) findViewById(R.id.edtext);
        btnsend.setOnClickListener(this);
        btnreg.setOnClickListener(this);
        btnunreg.setOnClickListener(this);


    }
    public void onClick(View v){
        switch (v.getId()) {
        case R.id.btnsend:
            //发送广播
            Intent intent = new Intent(); 
            intent.setAction(ACTION_ZDY);
            intent.putExtra("res", edText.getText().toString());
            sendBroadcast(intent);
            break;
        case R.id.btnreg:
            //注册广播
            receiver = new BroadcastReceiver() {

                @Override
                public void onReceive(Context context, Intent intent) {
                    String str = intent.getStringExtra("res");
                    tvtext.setText(str);
                }
            };
            IntentFilter filter = new IntentFilter();
            filter.addAction(ACTION_ZDY);
            registerReceiver(receiver, filter);
            break;
        case R.id.btnunreg:
            //销毁广播
            unregisterReceiver(receiver);
            break;
        }
    }

}

XML布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/edtext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入" />
    <TextView
        android:id="@+id/tvtext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="默认" />
    <Button
        android:id="@+id/btnsend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送" />
    <Button
        android:id="@+id/btnreg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册" />
    <Button
        android:id="@+id/btnunreg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="销毁" />

</LinearLayout>

其他地方没有修改的了,这是动态创建
刚打开时的样式
这里写图片描述

输入文本,点击注册,点击发送后的样式
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走到无路可退

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值