Как включить Bluetooth при нажатии кнопки - PullRequest
7 голосов
/ 01 июля 2011

В моем приложении мне нужно включить Bluetooth моего устройства одним нажатием кнопки. Как я могу этого достичь? Пример будет действительно полезным. Кроме того, какие разрешения мне нужно включить в мой mainfest.xml для того же самого?

Ответы [ 3 ]

8 голосов
/ 01 июля 2011

Ниже приведены выдержки из кода документации Android по Bluetooth

В файле манифеста для разрешений:

<manifest ... >
  <uses-permission android:name="android.permission.BLUETOOTH" />
  ...
</manifest>

Исходный код для включения Bluetooth

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
    // Device does not support Bluetooth
}

if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

Если включение Bluetooth выполнено успешно, ваш Activity получит код результата RESULT_OK в обратном вызове onActivityResult(). Если Bluetooth не был включен из-за ошибки (или пользователь ответил «Нет»), тогда код результата будет RESULT_CANCELED.

5 голосов
/ 01 декабря 2014

Включить Bluetooth в Android это не сложно. Но вы должны обратить внимание на некоторые детали. Есть 3 вида способов включить Bluetooth в Android.

1. Принудительно открыть Bluetooth.

Чтобы получить адаптер Bluetooth по умолчанию, т. Е. Используйте BluetoothAdapter.getDefaultAdapter();Вам нужно это разрешение:

<uses-permission android:name="android.permission.BLUETOOTH" />

Чтобы принудительно открыть Bluetooth, т.е. используйте BluetoothAdapter.enable();Вам необходимо это разрешение:

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Вот пример кода

/**
 * Bluetooth Manager
 * 
 * @author ifeegoo www.ifeegoo.com
 * 
 */
public class BluetoothManager
{

    /**
     * Whether current Android device support Bluetooth.
     * 
     * @return true:Support Bluetooth false:not support Bluetooth
     */
    public static boolean isBluetoothSupported()
    {
        return BluetoothAdapter.getDefaultAdapter() != null ? true : false;
    }

    /**
     * Whether current Android device Bluetooth is enabled.
     * 
     * @return true:Bluetooth is enabled false:Bluetooth not enabled
     */
    public static boolean isBluetoothEnabled()
    {
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter
                .getDefaultAdapter();

        if (bluetoothAdapter != null)
        {
            return bluetoothAdapter.isEnabled();
        }

        return false;
    }

    /**
     * Force to turn on Bluetooth on Android device.
     * 
     * @return true:force to turn on Bluetooth success 
     * false:force to turn on Bluetooth failure
     */
    public static boolean turnOnBluetooth()
    {
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter
                .getDefaultAdapter();

        if (bluetoothAdapter != null)
        {
            return bluetoothAdapter.enable();
        }

        return false;
    }
}

Приведенный выше способ включения Bluetooth не сообщит пользователю, успешно ли включен Bluetooth. КогдаВы вызываете метод enable (), вы не включите Bluetooth на 100%. Из-за причины, по которой некоторые приложения безопасности отказывают вам в этом, и т. д. Необходимо обратить внимание на возвращаемое значение метода enable ().

Официальный API метода enable () сообщает нам, что:

Bluetooth никогда не должен быть включен без прямого согласия пользователя.Если вы хотите включить Bluetooth для создания беспроводного соединения, вам следует использовать намерение ACTION_REQUEST_ENABLE, которое вызовет диалоговое окно с запросом разрешения пользователя на включение Bluetooth.Метод enable () предоставляется только для приложений, в которых имеется пользовательский интерфейс для изменения системных настроек, например, приложение «Power Manager».

Поэтому не рекомендуется включать Bluetooth с помощью метода enable (), если вы не сообщите пользователю, что будете делать.

2. Используйте Системное оповещение, чтобы напомнить пользователям, что вы включите Bluetooth с помощью startActivityForResult.

this.startActivityForResult(requestBluetoothOn, REQUEST_CODE_BLUETOOTH_ON) 
need this permission:
<uses-permission android:name="android.permission.BLUETOOTH" />


public class MainActivity extends Activity
{
    /**
     * Custom integer value code for request to turn on Bluetooth,it's equal            
      *requestCode in onActivityResult.
     */
    private static final int REQUEST_CODE_BLUETOOTH_ON = 1313;

    /**
     * Bluetooth device discovery time,second。
     */
    private static final int BLUETOOTH_DISCOVERABLE_DURATION = 250;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_main);

        if ((BluetoothManager.isBluetoothSupported())
                && (!BluetoothManager.isBluetoothEnabled()))
        {
            this.turnOnBluetooth();
        }
    }

    /**
     * Use system alert to remind user that the app will turn on Bluetooth
     */
    private void turnOnBluetooth()
    {
        // request to turn on Bluetooth
        Intent requestBluetoothOn = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);

        // Set the Bluetooth discoverable.
        requestBluetoothOn
                .setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

        // Set the Bluetooth discoverable time.
        requestBluetoothOn.putExtra(
                BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,
                BLUETOOTH_DISCOVERABLE_DURATION);

        // request to turn on Bluetooth
        this.startActivityForResult(requestBluetoothOn,
                REQUEST_CODE_BLUETOOTH_ON);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == REQUEST_CODE_BLUETOOTH_ON)
        {
            switch (resultCode)
            {
                // When the user press OK button.
                case Activity.RESULT_OK:
                {
                    // TODO 
                }
                break;

                // When the user press cancel button or back button.
                case Activity.RESULT_CANCELED:
                {
                    // TODO 
                }
                break;
                default:
                break;
            }
        }
    }
}

Это лучший способ длявам нужно включить Bluetooth на Android.

3.Привести пользователей к настройкам Bluetooth системы, чтобы они самостоятельно включали Bluetooth.

// Guide users to system Bluetooth settings to turn on Bluetooth by himselves.
this.startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));

В моем приложении. Учитывая код логический, а такжепользовательский опыт, я использую следующие шаги для включения Bluetooth:

1.используем enable () для включения Bluetooth. Но я скажу пользователям, что я включу Bluetooth, если они позволят мне это сделатьЯ позвоню enable (), чтобы включить Bluetooth. Это лучше, чем вызвать системное оповещение, потому что мы можем контролировать содержимое, чтобы напомнить пользователю.Вы должны обратить внимание, что это не 100% для включения Bluetooth с помощью enable (), некоторые приложения безопасности или другие причины отказывают вам в этом. Но мы можем оценить это, независимо от того, включим мы Bluetooth или нет, по возвращаемому значению метода.enable ().

2. Если метод enable () возвращает false, то мы используем startActivityForResult, чтобы напомнить пользователям, что мы включим Bluetooth.

3. Если шаг 2 не будет работатьпо некоторым причинам вы можете указать пользователям перейти к системным настройкам Bluetooth, чтобы самостоятельно включить Bluetooth.

Добавить еще: начиная с Android 6.0 нам нужно иметь дело с разрешением Bluetooth.

0 голосов
/ 01 июля 2011

Это решение поможет вам Android Bluetooth . Но для получения подробной информации об использовании Bluetooth в Android вместе с manifest.xml вы должны увидеть этот Android Bluetooth .

Для получения разрешения вам нужно.

<manifest ... >
  <uses-permission android:name="android.permission.BLUETOOTH" />
  ...
</manifest>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...