Cách bật / tắt bluetooth theo chương trình trong Android


104

Tôi muốn bật / tắt bluetooth thông qua chương trình. Tôi có mã sau đây.

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

Nhưng mã này không hoạt động trong SDK 1.5. Làm thế nào tôi có thể làm cho nó hoạt động?


Làm thế nào là nó không hoạt động? bạn đang nhận được một lỗi? Nếu vậy thì đó là lỗi gì?
Adam Driscoll

1
BluetoothAdapter đang hiển thị lỗi trong SDK 1.5
user458295

Câu trả lời:



164

mã này đã làm việc cho tôi ..

//Disable bluetooth
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
} 

Để điều này hoạt động, bạn phải có các quyền sau:

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

nó cũng thực sự làm việc cho tôi. phương pháp đơn giản để ngắt kết nối bluetooth trong các thiết bị Android. cảm ơn bạn rất nhiều.
Amit Thaper

7
nếu bạn thêm quyền BLUETOOTH_ADMIN thì nó hoạt động nhưng nếu không, bạn cần sử dụng startActivityForResult (enableBtIntent, 0); để kích hoạt bluetooth của bạn
Majid Golshadi

1
Cảm ơn câu trả lời hữu ích của bạn +1. chỉ là tôi muốn thêm cho những người không biết cách bật nó: mBl BluetoothAdapter.enable ()
Chris Sim

97

Đây là một cách mạnh mẽ hơn để thực hiện việc này, cũng xử lý các giá trị trả về của các enable()\disable()phương thức:

public static boolean setBluetooth(boolean enable) {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    boolean isEnabled = bluetoothAdapter.isEnabled();
    if (enable && !isEnabled) {
        return bluetoothAdapter.enable(); 
    }
    else if(!enable && isEnabled) {
        return bluetoothAdapter.disable();
    }
    // No need to change bluetooth state
    return true;
}

Và thêm các quyền sau vào tệp kê khai của bạn:

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

Nhưng hãy nhớ những điểm quan trọng sau:

Đây là một cuộc gọi không đồng bộ: nó sẽ trả về ngay lập tức và khách hàng phải lắng nghe ACTION_STATE_CHANGED để được thông báo về những thay đổi trạng thái bộ điều hợp tiếp theo. Nếu lệnh gọi này trả về true, thì trạng thái bộ điều hợp sẽ ngay lập tức chuyển từ STATE_OFF sang STATE_TURNING_ON và một thời gian sau chuyển đổi sang STATE_OFF hoặc STATE_ON. Nếu cuộc gọi này trả về false thì đã xảy ra sự cố ngay lập tức khiến bộ điều hợp không được bật - chẳng hạn như Chế độ trên máy bay hoặc bộ điều hợp đã được bật.

CẬP NHẬT:

Ok, vậy làm thế nào để triển khai bluetooth nghe ?:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                                                 BluetoothAdapter.ERROR);
            switch (state) {
            case BluetoothAdapter.STATE_OFF:
                // Bluetooth has been turned off;
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                // Bluetooth is turning off;
                break;
            case BluetoothAdapter.STATE_ON:
                // Bluetooth is on
                break;
            case BluetoothAdapter.STATE_TURNING_ON:
                // Bluetooth is turning on
                break;
            }
        }
    }
};

Và làm thế nào để đăng ký / hủy đăng ký đầu thu? (Trong Activitylớp của bạn )

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ...

    // Register for broadcasts on BluetoothAdapter state change
    IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mReceiver, filter);
}

@Override
public void onStop() {
    super.onStop();

     // ...

    // Unregister broadcast listeners
    unregisterReceiver(mReceiver);
}

1
nếu bạn thêm BLUETOOTH_ADMINsự cho phép nó làm việc nhưng nếu không bạn cần phải sử dụng startActivityForResult(enableBtIntent, 0);để cho phép bluetooth của bạn
Majid Golshadi

1
thông tin được đánh dấu được trích dẫn từ tài liệu BluetoothAdapter, đặc biệt cho phương thức enable ().
Kevin Lee

này, các tài liệu nói rằng Bluetooth should never be enabled without direct user consent. If you want to turn on Bluetooth in order to create a wireless connection, you should use the ACTION_REQUEST_ENABLE Intent, which will raise a dialog that requests user permission to turn on Bluetooth. The enable() method is provided only for applications that include a user interface for changing system settings, such as a "power manager" app.Điều đó có nghĩa là gì? Đối với người yêu cũ. Tôi đã tạo một ứng dụng nhỏ từ mã của bạn và nó đã hoạt động. Nhưng nếu tôi muốn tải lên Play Store thì không được?
Hilal

@Hilal nó sẽ hoạt động. Nhưng người dùng cần phải đồng ý trước khi cài đặt. Họ sẽ thấy một hộp thoại như sau: pewinternet.org/2015/11/10/…
Caner

23

Để bật Bluetooth, bạn có thể sử dụng một trong các chức năng sau:

 public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        Intent intentBtEnabled = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
        // The REQUEST_ENABLE_BT constant passed to startActivityForResult() is a locally defined integer (which must be greater than 0), that the system passes back to you in your onActivityResult() 
        // implementation as the requestCode parameter. 
        int REQUEST_ENABLE_BT = 1;
        startActivityForResult(intentBtEnabled, REQUEST_ENABLE_BT);
        }
  }

Chức năng thứ hai là:

public void enableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (!mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.enable();
    }
}

Sự khác biệt là chức năng đầu tiên khiến ứng dụng yêu cầu người dùng cho phép bật Bluetooth hoặc từ chối. Chức năng thứ hai làm cho ứng dụng bật Bluetooth trực tiếp.

Để tắt Bluetooth, hãy sử dụng chức năng sau:

public void disableBT(View view){
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter.isEnabled()){
        mBluetoothAdapter.disable();
    }
}

LƯU Ý / Chức năng đầu tiên chỉ cần quyền sau để được xác định trong tệp AndroidManifest.xml:

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

Trong khi, các chức năng thứ hai và thứ ba cần các quyền sau:

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

tôi nghĩ rằng các tham số (Xem view) là không cần thiết
CitrusO2

6

Giải pháp của prijin đã làm việc hoàn hảo cho tôi. Công bằng mà nói, cần có hai quyền bổ sung:

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

Khi những thứ này được thêm vào, việc bật và tắt hoạt động hoàn hảo với bộ điều hợp bluetooth mặc định.


4

Tôi đã sử dụng mã bên dưới để tắt BT khi ứng dụng của tôi khởi chạy và hoạt động tốt. Không chắc liệu đây có phải là cách chính xác để thực hiện điều này không vì google khuyến cáo không sử dụng "bluetooth.disable ();" mà không có hành động rõ ràng của người dùng để tắt Bluetooth.

    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
    bluetooth.disable();

Tôi chỉ sử dụng sự cho phép dưới đây.

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

2

Thêm các quyền sau vào tệp kê khai của bạn:

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

Bật bluetooth sử dụng cái này

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (!mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.enable(); 
}else{Toast.makeText(getApplicationContext(), "Bluetooth Al-Ready Enable", Toast.LENGTH_LONG).show();}

Tắt bluetooth sử dụng cái này

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
}

0

thử cái này:

//this method to check bluetooth is enable or not: true if enable, false is not enable
public static boolean isBluetoothEnabled()
    {
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            // Bluetooth is not enable :)
            return false;
        }
        else{
            return true;
        }

    }

//method to enable bluetooth
    public static void enableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
    }

//method to disable bluetooth
    public static void disableBluetooth(){
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.disable();
        }
    }

Thêm các quyền này trong tệp kê khai

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.