创建的新项目需要用到蓝牙,在网络上参考了一堆方法但是已经不适用与新版Android
在使用bluetoothAdapter.enable();强制打开蓝牙或者利用Intent显示打开蓝牙时,在AndroidManifest.xml中声明
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />权限仍然不可用。
经过查阅资料后得知应该在打开蓝牙前动态的申请BLUETOOTH_CONNECT方法,具体方式如下:
if (ContextCompat.checkSelfPermission(this,Manifest.permission.BLUETOOTH_CONNECT)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.BLUETOOTH_CONNECT},REQUEST_CODE);
; }
再利用onRequestPermissionsResult方法接收,
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "权限开启失败", Toast.LENGTH_LONG).show();
}
}
}
其中REQUEST_CODE应该在全局变量中声明:final int REQUEST_CODE = 1;
最后在利用显示方法打开蓝牙,完整代码如下:
public void init() {
if (ContextCompat.checkSelfPermission(this,Manifest.permission.BLUETOOTH_CONNECT)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.BLUETOOTH_CONNECT},REQUEST_CODE);
; }
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, REQUEST_ENABLE_BT);
}
}
//在利用 onActivityResult方法
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (REQUEST_ENABLE_BT == requestCode) {
if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "打开蓝牙失败", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "蓝牙已开启", Toast.LENGTH_SHORT).show();
}
}
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "权限开启失败", Toast.LENGTH_LONG).show();
}
}
}
本篇仅作参考。