最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Cannot Resolve Bluetooth Permissions in Android Code - Stack Overflow

programmeradmin1浏览0评论

I'm working on an Android app that scans for Bluetooth devices and print receipt. I'm trying to check for Bluetooth permissions and request them if necessary. However, I am getting an exception during the printing process. below is main activity method for checking bluetooth

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_ENABLE_BT) {
        if (resultCode == RESULT_OK) {
            // Bluetooth has been enabled, start device discovery
            startDeviceDiscovery();
        } else {
            // Bluetooth was not enabled, handle accordingly
            Toast.makeText(this, "Bluetooth needs to be enabled to use this feature", Toast.LENGTH_SHORT).show();
        }
    }
}

And this was method for for device discovery

private void startDeviceDiscovery() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED ||
            ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED) {
        // Request the necessary permissions
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_ADMIN},
                REQUEST_BLUETOOTH_PERMISSIONS);
    } else {
        // Permissions are already granted, start discovery
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (bluetoothAdapter.isDiscovering()) {
            bluetoothAdapter.cancelDiscovery();
        }
        bluetoothAdapter.startDiscovery();
        Toast.makeText(this, "Starting Bluetooth device discovery", Toast.LENGTH_SHORT).show();
    }
}

when app running, I always getting the toast message of "Bluetooth needs to be enabled to use this feature"

I already added the permissions, here

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission
    android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation"
    tools:targetApi="s" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission
    android:name="android.permission.ACCESS_COARSE_LOCATION"
    android:maxSdkVersion="30" />
<uses-permission
    android:name="android.permission.ACCESS_FINE_LOCATION"
    android:maxSdkVersion="30" />

also, I used the class for manage bluetooth named PrinterSDK openBt method, this was it,

public boolean openBT() throws IOException {
    try {
        // Standard SerialPortService ID
        UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
        mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
        Method createMethod = mmDevice.getClass().getMethod("createInsecureRfcommSocket", new Class[] { int.class });
        mmSocket = (BluetoothSocket)createMethod.invoke(mmDevice, 1);
        System.out.println(mmSocket);
        Log.d("PrinterSDK", "Socket created successfully. mmSocket: " + mmSocket);
        mBluetoothAdapter.cancelDiscovery();
        mmSocket.connect();
        mmOutputStream = mmSocket.getOutputStream();
        mmInputStream = mmSocket.getInputStream();
        beginListenForData();
    } catch (Exception e) {
        Log.e("PrinterSDK", "Error in openBT: " + e.getMessage(), e);
        e.printStackTrace();
    }
    return mmSocket.isConnected();
}

And there was an exception when running openBT method in PrinterSDK Class, its below

2025-01-21 16:25:04.290 16950-16950 PrinterSDK sales.smtk.mmc D Socket created successfully. mmSocket: android.bluetooth.BluetoothSocket@fa34793 2025-01-21 16:25:09.515 16950-16950 PrinterSDK sales.smtk.mmc E Error in openBT: read failed, socket might closed or timeout, read ret: -1 java.io.IOException: read failed, socket might closed or timeout, read ret: -1 at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:758) at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:711) at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:409) at sales.smtk.mmc.PrinterSDK.openBT(PrinterSDK.java:130) at sales.smtk.mmc.Receipt$10.onClick(Receipt.java:480) at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:233) at android.app.ActivityThread.main(ActivityThread.java:8063) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978) 2025-01-21 16:25:09.515 16950-16950 System.err sales.smtk.mmc W at sales.smtk.mmc.PrinterSDK.openBT(PrinterSDK.java:130)

Can anyone help me to fix this, I don't have idea what was the error

发布评论

评论列表(0)

  1. 暂无评论