Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable bluetooth method is deprecated in Android API 33 #1267

Open
marllonfrizzo opened this issue Jan 17, 2025 · 4 comments
Open

Enable bluetooth method is deprecated in Android API 33 #1267

marllonfrizzo opened this issue Jan 17, 2025 · 4 comments
Labels
pending Issues that are planned to be worked on at some point in the future

Comments

@marllonfrizzo
Copy link

Hello!

After updating from version 3.2.1 to version 3.4.0, the enable method stopped working on Android API 33.

I noticed that this function was deprecated on Android API 33 and to activate Bluetooth programmatically, it is necessary to request user permission.

According to the documentation, for this request to work, an ACTION_REQUEST_ENABLE Intent must be used. I have no experience with Android development, but checking the changes that occurred between versions 3.2.1 and 3.4.0, this PR #1232 possibly introduced the change that caused the reported problem as a side effect. By reverting this change for testing, the enable method works by opening a dialog for the user to provide this permission.

I believe that reverting is not a solution, since this change fixes other problems, but perhaps think of some other solution to work on Android API 33 or update the documentation regarding this.

Best regards!

@Rafaelbg107
Copy link

Hi!

At the meantime I found a workaround using expo-intent-launcher to access ACTION_REQUEST_ENABLE.

Your enabler function should be like

const enableBT = async () => {
  if (Platform.OS === 'android') {
    try {
      startActivityAsync('android.bluetooth.adapter.action.REQUEST_ENABLE');
    } catch (error) {
      console.log(error)
    }
  }
}

At least while it is fixed.

@aliberski
Copy link
Collaborator

Thank you for bringing this up! We've added the issue to our backlog and will work on a fix soon. Contributions are always welcome if you'd like to help out!

@aliberski aliberski added the pending Issues that are planned to be worked on at some point in the future label Jan 18, 2025
@marllonfrizzo
Copy link
Author

Hi!

At the meantime I found a workaround using expo-intent-launcher to access ACTION_REQUEST_ENABLE.

Your enabler function should be like

const enableBT = async () => {
  if (Platform.OS === 'android') {
    try {
      startActivityAsync('android.bluetooth.adapter.action.REQUEST_ENABLE');
    } catch (error) {
      console.log(error)
    }
  }
}

At least while it is fixed.

Hello,

Thanks for the tip, it worked!

Here I ended up using react-native's own Linking, it worked too.

It looked like this

Linking
  .sendIntent('android.bluetooth.adapter.action.REQUEST_ENABLE')
  .catch(error => {
    console.warn(error);
    Linking.openSettings();
  });

Thank you for bringing this up! We've added the issue to our backlog and will work on a fix soon. Contributions are always welcome if you'd like to help out!

Thanks for the quick response!

I have no experience with Android development, but I'll give it a try.

Best regards!

@Rafaelbg107
Copy link

Thank you for bringing this up! We've added the issue to our backlog and will work on a fix soon. Contributions are always welcome if you'd like to help out!

I've never submitted a fix on a public project but I'll give it a shot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pending Issues that are planned to be worked on at some point in the future
Projects
None yet
Development

No branches or pull requests

3 participants