Android学习笔记——广播

xiaoxiao2022-06-11  12

标准广播和有序广播

在Android系统中,标准广播是一种完全异步执行的广播,广播发出后,所有的广播接收器几乎会在同一时刻接收到这条广播消息,没有先后顺序之分。 有序广播则是一种同步执行的广播。在广播发出后,同一时刻只有一个广播接收器能够接收到这条广播,当这条广播中的逻辑执行完毕后,广播才会继续传递。此时广播接收器有先后顺序,在前面的广播接收器可以拦截正在传递的广播。

动态注册广播和静态注册广播接收器

动态注册广播的意思是在代码中进行注册,静态注册的意思是在AndroidManifest中注册。不管是动态注册还是静态注册都需要有一个自己的广播接收器,需要继承BroadcastReciver并重写它的onReceive()方法,当收到要接收的广播时,onReceive()方法就会执行。

class MyRecevier extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"received broadcast",Toast.LENGTH_SHORT).show(); } }
1.动态注册广播

动态注册广播,只需要调用Context的registerReceiver()方法就好了,该方法需要两个参数,第一个参数是就是上面的BroadcastReceiver,第二个参数是IntentFilter,用来过滤Intent。 当调用完registerReceiver()方法后广播动态注册就算完成了 ,值得注意的是,需要调用unregisterReceiver()方法取消注册。

public class MainActivity extends AppCompatActivity { private IntentFilter mIntentFilter; private NetRecevier mNetRecevier; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mIntentFilter=new IntentFilter(); mIntentFilter.addAction("com.example.broadcast.CONNECTIVITY_CHANGE"); mNetRecevier =new NetRecevier(); registerReceiver(mNetRecevier,mIntentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mNetRecevier); } class NetRecevier extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"network state change",Toast.LENGTH_SHORT).show(); } }
1.静态注册广播

静态注册广播时在AndroidManifest.xml文件中的< application >标签里定义< receviver >标签,并在该标签中完成注册和添加意图过滤器的操作。就能完成广播接收其的注册。

<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter android:priority="100"> <action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter> </receiver>

其中enabled表示是否启用该广播,exported表示是否接收本程序外的广播,priority表示上文所述的有序广播的优先级(该属性非必须)。

发送广播

发送标准广播

发送广播只需要生成一个和IntentFilter对应的Intent,然后调用Context中的sendBroadcast(Intent i)方法即可发送广播。

private void sendLocalBroadcast(){ Intent intent=new Intent("com.example.broadcast.MY_BROADCAST"); sendBroadcast(intent); }

发送有序广播

和发送标准广播一样,只需要将sendBroadcast方法改为sendOrderedBroadcast(intent,null)即可 另外上文中提到的priority属性,该数值表示广播接收器的优先级,属性值越高就能先接收到广播,最高值为100。 在BroadcastReceiver的onReceive()方法中调用abortBroadcast()方法即可实现广播的拦截,后续接收器将无法收到广播。

本地广播

本地广播发出的广播只能在应用程序内部进行传递 ,而且广播接收器也只能接收来自本应用程序发出的广播 。 本地广播和一般广播的不同主要是LocalBroadcastManager。LocalBroadcastManager可以通过以下方法获得:

LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance(Context context);

之后对广播进行操作只需借用localBroadcastManager就行。

localBroadcastManager.sendBroadcast(Intent); localBroadcastManager.registerReceiver(BroadcastReceiver ,IntentFilter); localBroadcastManager.unregisterReceiver(BroadcastReceiver );
转载请注明原文地址: https://www.6miu.com/read-4930766.html

最新回复(0)