1、概念:标准广播:完全异步执行,不可中断,广播发出后broadCastReceiver 几乎同时接受,之间是没有先后顺序。
有序广播:同步执行,可中断。
2、注册:动态注册、静态注册。
动态注册:
public class MainActivity extends AppCompatActivity { private MyBroadCastReceiver myBroadCastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册 IntentFilter intentFilter = new IntentFilter(); //添加要监听的广播 intentFilter.addAction("android.intent.action.TIME_TICK"); myBroadCastReceiver = new MyBroadCastReceiver(); registerReceiver(myBroadCastReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadCastReceiver); } //创建接受类 public class MyBroadCastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "this is broadcast", Toast.LENGTH_SHORT).show(); } } }
静态注册:动态注册虽然灵活但是必须在程序启动后才能接受广播,要在程序未启动情况下接收广播就需要静态注册。
可以使用androidstudio进行注册,在manifest中会自动生成注册代码,
<receiver android:name=".MyStaticReceiver" android:enabled="true" android:exported="true"> </receiver>
自android8.0之后所有隐式广播,都不允许使用静态注册方式来接收,隐式广播指没有指定发送给那个应用程序的广播。
所以在manifest文件中进行声明:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcast"> //接受开机广播的权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.BroadCast"> <receiver android:name=".MyStaticReceiver" android:enabled="true" android:exported="true"> //指定要接收的广播,声明相应的action,其实就是将隐式声明为显示 <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>