静态注册广播
通过右键新建一个广播

此时,AndroidManifest.xml文件中会有以下代码
<receiverandroid:name=".receiver.ShockReceiver"android:enabled="true"android:exported="true"></receiver>
enabled:是否启用该广播,默认为true,可以不写
exported:是否可跨应用使用该广播,如果为false,则只能在当前应用中接收广播
添加意图过滤器
<receiverandroid:name=".receiver.ShockReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.example.study_android.shock"/></intent-filter></receiver>
定义广播接收者
public class ShockReceiver extends BroadcastReceiver {public static final String SHOCK_ACTION = "com.example.study_android.shock";@Overridepublic void onReceive(Context context, Intent intent) {if (intent != null && intent.getAction().equals(SHOCK_ACTION)) {// 从系统服务中获取震动管理器Vibrator vb = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);// 命令震动器震动若干秒,单位:毫秒vb.vibrate(500);}}
}
发送广播
@Overridepublic void onClick(View view) {// Android8.0之后删除了大部分静态注册,防止退出App后仍在接收广播,// 为了让应用能够继续接收静态广播,需要给静态注册的广播指定包名。String fullName = "com.example.study_android.receiver.ShockReceiver";Intent intent = new Intent(ShockReceiver.SHOCK_ACTION);// 发送静态广播时,需要通过setComponent方法指定接收器的完整路径ComponentName componentName = new ComponentName(this, fullName);// 设置意图的组件信息intent.setComponent(componentName);sendBroadcast(intent);}
案例代码
