什么是广播
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);
}
}