在Android上编程实现蓝牙启用

7

我想确定在Android上以编程方式启用蓝牙的首选方法。 我发现以下两种技术均可使用(至少在Android 4.0.4上):

public class MyActivity extends Activity {
    public static final int MY_BLUETOOTH_ENABLE_REQUEST_ID = 6;
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, MY_BLUETOOTH_ENABLE_REQUEST_ID);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == MY_BLUETOOTH_ENABLE_REQUEST_ID) {
            if (resultCode == RESULT_OK) {
                // Request granted - bluetooth is turning on...
            }
            if (resultCode == RESULT_CANCELED) {
                // Request denied by user, or an error was encountered while 
                // attempting to enable bluetooth
            }
        }
    }

或者说……

BluetoothAdapter.getDefaultAdapter().enable();

前者在启用之前向用户请求权限,而后者只是默默地启用蓝牙(但需要"android.permission.BLUETOOTH_ADMIN"权限)。其中一个或另一个已经老旧/过时了吗?还是有些设备只支持其中一种技术?或者只是个人喜好决定我使用哪种?


我记得在某个地方读到过,你不应该在没有告知用户的情况下打开东西。Google 也不喜欢这样做。 - noidraug
1
这是正确的,但两种技术都由Google提供,因此应该得到Google的认可...并且两种方法都告诉用户,只是在何时告诉用户(在安装时与实际打开蓝牙时)。我知道从客户友好角度来看,一种可能更可取,但我也想知道这两种技术是否在所有地方都可用,还是其中之一受到限制,或者其中一种曾经是正常的方式,但现在不被认可等。 - Troy
嗨特洛伊!你有找到答案吗?我打算在我的应用程序中使用它,但是我看到了那个警告。那我该怎么办?我已经在清单文件中添加了那些权限,还需要做些什么吗?或者例如,如果我将我的应用程序上传到Play商店,会拒绝它吗?谢谢! - Hilal
3个回答

5
在Android 文档中明确提到:

禁止在没有用户直接同意的情况下启用蓝牙。如果您想打开蓝牙以创建无线连接,则应使用ACTION_REQUEST_ENABLE Intent,它会弹出对话框请求用户允许打开蓝牙。仅为包含更改系统设置的用户界面(例如“电源管理器”应用程序)的应用程序提供enable()方法。

这两种技术都可以实现目的,但选择基于您的目的和要求。希望它能回答您的问题。

1
这对我有效... BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mBluetoothAdapter.enable();

1

谢谢回复,但我不需要启用蓝牙的说明(我在我的问题中提供了说明)。问题是关于两种技术之间的优先选择以及每种技术在Android版本中的可用性。 - Troy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接