首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Android Switch 控件實現藍牙開關功能完整示例

     編輯:Java 相關知識

效果預覽

使用 Switch 控件實現藍牙狀態的可視化切換:開啟時顯示「藍牙開啟中」,關閉時顯示「藍牙關閉中」,並自動呼叫系統藍牙 API 完成真實狀態變更。

佈局 XML 定義

<Switch
    android:id="@+id/open"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOff="藍牙關閉中"
    android:textOn="藍牙開啟中" />
  • textOff/textOn:分別對應關閉/開啟狀態的顯示文字
  • 寬高設為 wrap_content 適配不同螢幕密度

Activity/Kotlin 邏輯實現

Switch openSwitch = findViewById(R.id.open);
// 獲取藍牙適配器
final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

openSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // 開啟藍牙(異步操作,實際狀態變更會觸發 ACTION_STATE_CHANGED 廣播)
            if (!mBluetoothAdapter.isEnabled()) {
                mBluetoothAdapter.enable();
            }
        } else {
            // 關閉藍牙
            if (mBluetoothAdapter.isEnabled()) {
                mBluetoothAdapter.disable();
            }
        }
    }
});

必要權限配置

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Android 12+ 需額外聲明 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

進階優化建議

  1. 狀態同步:註冊 BluetoothAdapter.ACTION_STATE_CHANGED 廣播接收器,監聽 STATE_ON/STATE_OFF 實時更新 UI,避免異步操作導致介面與實際狀態不同步。
  2. 權限運行時申請:Android 6.0+ 需動態申請 BLUETOOTH_CONNECT,建議封裝 PermissionUtil 統一處理。
  3. 禁用狀態處理:藍牙不可用時(如飛行模式、硬體不支援)自動將 Switch 設為 setEnabled(false) 並提示用戶。
  4. Material Design 風格:使用 MaterialComponents 主題或 SwitchMaterial 獲得更現代的視覺效果。

常見問題排查

現象可能原因解決方法
點擊 Switch 無反應 未聲明 BLUETOOTH_ADMIN 權限 在 Manifest 中添加對應權限
enable()/disable() 返回 false 藍牙硬體不存在或被系統策略禁用 檢查 getDefaultAdapter() != null 並引導用戶至系統設定
Android 12 崩潰 缺少 BLUETOOTH_CONNECT 權限 添加權限並執行運行時申請流程

總結

本文提供了從佈局定義、邏輯綁定、權限配置到進階優化的完整藍牙開關實現方案。核心在於 Switch 控件的狀態監聽 與 BluetoothAdapter 異步 API 的正確協作,並妥善處理 Android 版本差異帶來的權限變更。將此模式應用於 Wi-Fi、熱點、NFC 等系統開關同理可得。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved