广播

什么是广播

1.广播是 Android四大组件之一,全称BroadcastReceiver
2.广播分为接收方和发送方,就算没有接收方,发送方也会发送数据
3.广播可以实现跨多个页面的数据通信。
4.广播可以实现跨进程的的数据通信。

静态注册无序广播示例

创建两个工程,相当于两个应用程序之间传输数据,在broadcast工程里面
写一个布局,然后添加点击事件。在点击事件里面使用intent来传输数据,用sendBroadcast方法来发送数据。

接下来是XML文件代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="myapplication.com.example.broaddemo.MainActivity">

   <Button
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:text="支付宝叫你一声感答应吗"
       android:id="@+id/btn_zhuce"/>

</android.support.constraint.ConstraintLayout>

这是activity里面的代码

public class MainActivity extends AppCompatActivity {
    private Button zhuceBtn;

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

        zhuceBtn=findViewById(R.id.btn_zhuce);

        zhuceBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //发送广播
                Intent intent=new Intent("zhifubao");
                sendOrderedBroadcast(intent,null);//自定义权限

            }
        });
    }
}

接下来就是在receiver的工程里面注册一下receiver标签,然后新建一个MyBroadCastReceiverOne继承BroadcastReceiver,然后在里面写一个toast提示。

public class MyBroadCastReceiverOne extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "叫我干啥", Toast.LENGTH_SHORT).show();
        Log.e("MyBroadCastReceiverOne","111111111111111111111111111.....................");
    }
}

动态注册无序广播示例

其实这两者区别就是不需要在manifest里面注册了,在代码修改就行。
发送方不变。

public class MainActivity extends AppCompatActivity {
    //private MyBroadCastReceiverOne myBroadCastReceiverOne;

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

       // myBroadCastReceiverOne=new MyBroadCastReceiverOne();


       // IntentFilter filter = new IntentFilter();
       // filter.addAction("zhifubao");
        //动态注册广播接收器
       // registerReceiver(myBroadCastReceiverOne, filter);

       // myBroadCastReceiverOne=new MyBroadCastReceiverOne();


        //动态注册广播接收器
        registerReceiver(myBroadCastReceiverOne1, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myBroadCastReceiverOne1);
    }
}

静态注册有序广播示例

先在receiver的工程里面注册两个receiver的标签

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="myapplication.com.example.receiver">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="支付宝demo"
        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=".MyBroadCastReceiverOne" >
        <intent-filter android:priority="-1000">
            <action android:name="zhifubao" />
        </intent-filter>
        </receiver>


        <receiver android:name=".MyBroadCastReceiverOne1" >
            <intent-filter android:priority="1000">
                <action android:name="zhifubao" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

然后把之前发送广播的方法变成sendorderedcast方法。接着新建一个MyBroadCastReceiverOne1继承BroadcastReceiver,然后打印一下,最后终止广播继续发送。

public class MyBroadCastReceiverOne1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "收到收到", Toast.LENGTH_SHORT).show();
        Log.e("MyBroadCastReceiverOne1","22222222222222222222222222.....................");
        abortBroadcast();//终止广播继续发送
    }
}

动态注册有序广播示例

同样的是不需要在manifest里面注册receiver标签,只要在activity里面加一个setPriority方法就行。

public class MainActivity extends AppCompatActivity {
    //private MyBroadCastReceiverOne myBroadCastReceiverOne;
    private MyBroadCastReceiverOne myBroadCastReceiverOne1;

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

        myBroadCastReceiverOne1 = new MyBroadCastReceiverOne();
        IntentFilter filter = new IntentFilter();
        filter.addAction("zhifubao");
        filter.setPriority(1000);
        //动态注册广播接收器
        registerReceiver(myBroadCastReceiverOne1, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myBroadCastReceiverOne1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值