广播 BroadcastReceiver

1.简单的广播

静态注册AndroidManifest.xml

      <receiver
            android:name=".MyReceiver1"
            android:enabled="true"
            android:exported="true">
        </receiver>
MainActivity

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

public class MainActivity extends Activity implements View.OnClickListener{

    private EditText ed;
    private Button sendbtn;

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

        ed= (EditText) this.findViewById(R.id.ed);
        sendbtn= (Button) this.findViewById(R.id.btnsend);
        sendbtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        String msg=ed.getText().toString();
        Intent it=new Intent(MainActivity.this,MyReceiver1.class);
        it.putExtra("msg",msg);
        this.sendBroadcast(it);
    }
}
MyReceiver1

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

public class MyReceiver1 extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String msg=intent.getStringExtra("msg");
        Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
    }
}


2.动态注释和注销

AndroidManifest.xml删除静态注册的代码

MainActivity


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

public class MainActivity extends Activity implements View.OnClickListener{

    private EditText ed;
    private Button sendbtn,zc,zx;
    private MyReceiver1 receiver1=null;

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

        ed= (EditText) this.findViewById(R.id.ed);
        sendbtn= (Button) this.findViewById(R.id.btnsend);
        sendbtn.setOnClickListener(this);
        zc= (Button) this.findViewById(R.id.btnzc);
        zc.setOnClickListener(this);
        zx= (Button) this.findViewById(R.id.btnzx);
        zx.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnsend:
                String msg=ed.getText().toString();
                Intent it=new Intent(MyReceiver1.ACTION);
                it.putExtra("msg", msg);
                this.sendBroadcast(it);
                break;
            case R.id.btnzc:
                if(receiver1==null){
                    receiver1=new MyReceiver1();
                    IntentFilter filter=new IntentFilter(MyReceiver1.ACTION);
                    //注册
                   registerReceiver(receiver1,filter);
                }
                break;
            case R.id.btnzx:
                if(receiver1!=null){
                    //注销之后,重新赋值为空
                    unregisterReceiver(receiver1);
                    receiver1=null;
                }
                break;
        }
    }
}
MyReceiver1
public class MyReceiver1 extends BroadcastReceiver {
    //intent中已经说明了,这是约定俗成的。
    public static final String ACTION="com.rj141.sb.broadcastreceiverdemo.intent.action.MyReceiver1";
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg=intent.getStringExtra("msg");
        Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
    }
}

3.发送和接收有序消息

AndroidManifest.xml

<receiver
            android:name=".MyReceiver1"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="com.rj141.sb.broadcastreceiverdemo.hello"></action>
            </intent-filter>
        </receiver>

        <receiver
            android:name=".MyReceiver2"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="com.rj141.sb.broadcastreceiverdemo.hello"></action>
            </intent-filter>
        </receiver>
MainActivity

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

public class MainActivity extends Activity implements View.OnClickListener{

    private EditText ed;
    private Button sendbtn;
    private MyReceiver1 receiver1=null;

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

        ed= (EditText) this.findViewById(R.id.ed);
        sendbtn= (Button) this.findViewById(R.id.btnsend);
        sendbtn.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnsend:
                String msg=ed.getText().toString();
                Intent it=new Intent("com.rj141.sb.broadcastreceiverdemo.hello");
                it.putExtra("msg", msg);
                this.sendOrderedBroadcast(it,null);
                break;
        }
    }
}
注意
 this.sendOrderedBroadcast(it,null);<span style="color:#cc7832;"> </span><pre name="code" class="java"><span style="color:#000000;">abortBroadcast();//终止广播</span>

 
 才能终止广播而不报错 
 

MyReceiver1,MyReceiver2是一样的

public class MyReceiver1 extends BroadcastReceiver {
    //intent中已经说明了,这是约定俗成的。
    public static final String ACTION="com.rj141.sb.broadcastreceiverdemo.intent.action.MyReceiver1";
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg=intent.getStringExtra("msg");
        Log.i("1",msg);
    }
}

4.为消息设置权限

AndroidManifest.xml

 <permission android:protectionLevel="normal"
        android:name="com.rj141.sb.broadcastreceiverdemo.MY_Permission"/>//设置权限
    
    <uses-permission android:name="com.rj141.sb.broadcastreceiverdemo.MY_Permission"/>//申请权限






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中注册广播接收器(BroadcastReceiver)需要以下步骤: 1. 创建一个继承自 BroadcastReceiver 的类,这个类将处理接收到的广播消息。例如,你可以创建一个名为 MyBroadcastReceiver 的类。 ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 在这里处理接收到的广播消息 } } ``` 2. 在 AndroidManifest.xml 文件中声明广播接收器。在 `<application>` 标签内部添加如下代码: ```xml <receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.ACTION_NAME" /> <!-- 添加其他需要匹配的 action --> </intent-filter> </receiver> ``` 其中,`android:name` 属性指定了广播接收器的类名,`.MyBroadcastReceiver` 表示当前包名下的 MyBroadcastReceiver 类。`android:enabled` 和 `android:exported` 属性分别用于启用和导出广播接收器。 3. 在你需要发送广播的地方,创建一个 Intent 对象,并使用 `sendBroadcast()` 方法发送广播。 ```java Intent intent = new Intent(); intent.setAction("android.intent.action.ACTION_NAME"); // 添加其他需要传递的数据 sendBroadcast(intent); ``` 其中,`"android.intent.action.ACTION_NAME"` 是你自定义的广播 action,用于匹配注册的广播接收器。 这样,当发送的广播 action 与注册的广播接收器的 action 匹配时,MyBroadcastReceiver 类中的 `onReceive()` 方法将被调用,你可以在该方法中处理接收到的广播消息。记得在不需要接收广播时,及时取消注册广播接收器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值