onunix 2024-03-27 15:20 采纳率: 77.8%
浏览 2

请问这里为什么没有出现预期的提示语

android,service,
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
this.startActivity(intent);

配置为:

 <service
           .....
            <meta-data
                android:name="android.bluetooth.device.action.REQUEST_ENABLE"
                android:value="ABC" />
        </service>


没有提示 ABC请求打开蓝牙 而是提示 某个应用要打开蓝牙 ,请问错在何处?

  • 写回答

4条回答 默认 最新

  • 关注

    回答参考Claude 3
    存在两个问题:

    1. ACTION_REQUEST_ENABLE 是一个系统级别的广播 Action,不应该在 <service> 标签内配置 <meta-data> 项目。它应该在 <activity> 标签内设置,或者在代码中通过 startActivityForResult() 方法启动。

    2. 即使在 <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> 标签内配置。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月27日