广播

    技术2022-07-17  94

    一、接收器注册 1、静态注册 静态注册广播的方式,可以让程序在未启动的情况下接收广播 ①、接收器类:

    public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"Boot Finish",Toast.LENGTH_SHORT).show(); } }

    ②、注册接收器:

    <!-- name指定注册的接收器 enable表示是否启用该接收器 exported表示是否允许接收本程序以外的广播 --> <receiver android:name=".BootReceiver" android:enabled="true" android:exported="true"> <intent-filter> <!--表示接收开机广播--> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>

    ③、权限申请:

    <!--申请监听开机广播的权限--> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    2、动态注册 动态注册的广播接收器要在程序启动后才能接收广播,不过可以自由控制注册与注销 ①、接收器类

    public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"the screen is on",Toast.LENGTH_SHORT).show(); } }

    ②、注册接收器

    public class mainActivity extends AppCompatActivity { ScreenReceiver screenReceiver=new ScreenReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter intentFilter=new IntentFilter(); //接收屏幕打开的广播 intentFilter.addAction("android.intent.action.SCREEN_ON"); registerReceiver(screenReceiver,intentFilter); } }

    ③、取消注册

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

    二、发送自定义广播 1、发送标准广播 ①、定义一个广播接收器来接收广播

    public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"have received the broadcast",Toast.LENGTH_SHORT).show(); } }

    ②、注册广播接收器

    IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("theBroadcast");//接收广播:theBroacast registerReceiver(myReceiver,intentFilter);

    ③、发送广播

    bt.setOnClickListener( view->{ //发送广播:theBroadcast Intent intent=new Intent("theBroadcast"); sendBroadcast(intent); } );

    ④、注销广播接收器

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

    2、发送有序广播 ①、发送广播 与标准广播相比,只需要将sendBroadcast()改为sendOrderedBroadcast()即可 ②、设置优先级

    <intent-filter android:priority="100"> <!--表示接收开机广播--> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter>

    通过android:priority可以给广播接收器设置优先级 ③、截断广播 在onReceive()中调用abortBroadcast()即可截断该广播

    Processed: 0.012, SQL: 9