Android——静态注册广播
静态注册广播
通过右键新建一个广播
此时,AndroidManifest.xml文件中会有以下代码
<receiver
android:name=".receiver.ShockReceiver"
android:enabled="true"
android:exported="true">
</receiver>
enabled:是否启用该广播,默认为true,可以不写
exported:是否可跨应用使用该广播,如果为false,则只能在当前应用中接收广播
添加意图过滤器
<receiver
android: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";
@Override
public 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);
}
}
}
发送广播
@Override
public 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);
}
案例代码