回答参考Claude 3
存在两个问题:
ACTION_REQUEST_ENABLE 是一个系统级别的广播 Action,不应该在 <service> 标签内配置 <meta-data> 项目。它应该在 <activity> 标签内设置,或者在代码中通过 startActivityForResult() 方法启动。
即使在 <activity> 标签内配置了 <meta-data>,它也不会影响 ACTION_REQUEST_ENABLE 的行为。这个 Action 是系统级别的请求,无法自定义提示语。
正确的做法是:
在代码中通过 startActivityForResult() 启动:
private static final int REQUEST_ENABLE_BT = 1;
// ...
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
// ...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ENABLE_BT) {
if (resultCode == RESULT_OK) {
// 用户允许打开蓝牙
} else {
// 用户拒绝打开蓝牙
}
}
}
通过这种方式,系统会弹出默认的蓝牙请求框,当用户作出选择后,可以在 onActivityResult() 方法中获取结果并做出相应处理。
如果想自定义蓝牙请求对话框的提示语,可以自己实现一个对话框,在对话框中调用 BluetoothAdapter.enable() 方法打开蓝牙。但这种做法需要您自行处理请求蓝牙权限的逻辑。
总之,ACTION_REQUEST_ENABLE 这个 Action 是系统级别的,无法通过配置 <meta-data> 来自定义提示语,也不应该在 <service> 标签内配置。