簡體   English   中英

Android啟用/禁用藍牙

[英]Android Enable/ Disable Bluetooth

我有一個代碼,在我的應用程序中,按鈕按下打開和關閉藍牙。

當藍牙打開或關閉時,我想將此按鈕的背景更改為綠色和紅色。 我為它做了google答案,並且有一個類似於它的stackoverflow帖子,他提到的方式不起作用。 我注冊了一個接收器,像往常一樣有一個開關盒,我提到這個按鈕的顏色變化,它不起作用。

事實上,接收器中的log.d甚至沒有顯示在android studio的終端中。

該守則不是關於如何影響顏色,而是從廣播接收器訪問藍牙的狀態變化

   public void enableDisableBT(){
        if(mBluetoothAdapter == null) {
            Log.d(TAG, "enableDisableBT: Does not have BT capabilities");
            Toast.makeText(getApplicationContext(),"No Bluetooth Capability", Toast.LENGTH_SHORT).show();
        }
        if (!mBluetoothAdapter.isEnabled()){
            Log.d(TAG, "enableDisableBT: enabling BT");
            //btnONOFF.setBackgroundColor(Color.GREEN); // Since bluetooth is NOT enabled, it enables bluetotoh and sets background color to green
            Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivity(enableBTIntent);

            IntentFilter BTIntent = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
            registerReceiver(mBroadcastReceiver1, BTIntent);
        }
        if(mBluetoothAdapter.isEnabled()){
            Log.d(TAG, "enableDisableBT: disabling BT");
            mBluetoothAdapter.disable();
            btnONOFF.setBackgroundColor(Color.RED);// Since bluetooth is  enabled, it disables bluetotoh and sets background color to green
            incomingMessages.setText("Incoming Messages");
            IntentFilter BTIntent = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
            registerReceiver(mBroadcastReceiver1, BTIntent);
        }

    }

 private final BroadcastReceiver mBroadcastReceiver1 = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // when discovery finds a device
            if (action.equals(mBluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)){
                final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,mBluetoothAdapter.ERROR);

                switch (state){
                    case BluetoothAdapter.STATE_OFF:
                        Log.d(TAG, "onReceive: STATE OFF");
                        break;
                    case BluetoothAdapter.STATE_TURNING_OFF:
                        Log.d(TAG, "mBroadcastReceiver1: STATE TURNING OFF");
                        break;
                    case BluetoothAdapter.STATE_ON:
                        //Log.d(TAG, "mBroadcastReceiver1: STATE ON");
                        btnONOFF.setBackgroundColor(Color.GREEN);
                        break;
                    case BluetoothAdapter.STATE_TURNING_ON:
                        Log.d(TAG, "mBroadcastReceiver1: STATE TURNING ON");
                        break;
                }
            }

        }
    };

您需要在清單中聲明BroadcastReceiver以偵聽藍牙狀態。 本文總結得很好: https//droidhat.com/broadcast-receiver-using-change-in-bluetooth-status

1)

/**
 * A receiver that listens to Bluetooth getting turned on.
 */
 public class BluetoothReceiver extends BroadcastReceiver {
   @Override public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    int state;
    switch (action) {
        case BluetoothAdapter.ACTION_STATE_CHANGED:
            state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
            if (state == BluetoothAdapter.STATE_ON) {
                // change my button color
            }
     }
   } 
 }

2)

<receiver          
  android:name="com.myapp.BluetoothReceiver"
                    android:enabled="true"
                    android:exported="true">
                    <intent-filter>
                        <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
                    </intent-filter>
 </receiver>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM