微信小程序實現藍牙開啟自動播放BGM

下面是一個完整的微信小程序實現方案,當藍牙設備連接時自動播放背景音樂(BGM)。

實現思路

  1. 監聽藍牙設備連接狀態

  2. 當檢測到藍牙設備連接時,自動播放音樂

  3. 當藍牙斷開時,停止音樂播放

  4. 處理相關權限和用戶交互

完整代碼實現

1. 項目結構

text

/pages/indexindex.jsindex.jsonindex.wxmlindex.wxss

2. index.wxml

xml

<view class="container"><view class="status">當前藍牙狀態: {{bluetoothStatus}}</view><button bindtap="initBluetooth">初始化藍牙</button><button bindtap="startSearch">搜索設備</button><view class="devices"><block wx:for="{{devices}}" wx:key="deviceId"><view class="device" bindtap="connectDevice" data-device="{{item}}">{{item.name}} ({{item.deviceId}})</view></block></view><audio id="bgm" src="/assets/bgm.mp3" loop></audio>
</view>

3. index.wxss

css

.container {padding: 20px;
}.status {margin: 20px 0;font-size: 16px;color: #333;
}button {margin-bottom: 10px;
}.device {padding: 10px;border: 1px solid #eee;margin-bottom: 5px;
}

4. index.js

javascript

Page({data: {bluetoothStatus: '未初始化',devices: [],connectedDeviceId: null,audioCtx: null},onLoad() {// 創建音頻上下文this.setData({audioCtx: wx.createInnerAudioContext()});this.data.audioCtx.src = '/assets/bgm.mp3';this.data.audioCtx.loop = true;// 監聽藍牙適配器狀態this.onBluetoothAdapterStateChange();},// 初始化藍牙initBluetooth() {wx.openBluetoothAdapter({success: (res) => {console.log('藍牙初始化成功', res);this.setData({ bluetoothStatus: '已初始化,未連接' });this.startBluetoothDevicesDiscovery();},fail: (err) => {console.error('藍牙初始化失敗', err);wx.showToast({title: '請打開手機藍牙',icon: 'none'});}});},// 開始搜索設備startSearch() {this.startBluetoothDevicesDiscovery();},// 開始發現設備startBluetoothDevicesDiscovery() {wx.startBluetoothDevicesDiscovery({success: (res) => {console.log('開始搜索設備', res);this.onBluetoothDeviceFound();},fail: (err) => {console.error('搜索設備失敗', err);}});},// 監聽發現新設備事件onBluetoothDeviceFound() {wx.onBluetoothDeviceFound((res) => {const devices = res.devices;console.log('發現新設備', devices);if (devices.length > 0) {this.setData({devices: this.data.devices.concat(devices)});}});},// 連接設備connectDevice(e) {const device = e.currentTarget.dataset.device;const deviceId = device.deviceId;wx.createBLEConnection({deviceId,success: (res) => {console.log('連接成功', res);this.setData({ bluetoothStatus: `已連接: ${device.name}`,connectedDeviceId: deviceId});// 連接成功后播放BGMthis.playBGM();},fail: (err) => {console.error('連接失敗', err);}});},// 播放背景音樂playBGM() {this.data.audioCtx.play();wx.showToast({title: '藍牙已連接,開始播放音樂',icon: 'none'});},// 停止背景音樂stopBGM() {this.data.audioCtx.stop();wx.showToast({title: '藍牙已斷開,停止播放音樂',icon: 'none'});},// 監聽藍牙適配器狀態變化onBluetoothAdapterStateChange() {wx.onBluetoothAdapterStateChange((res) => {console.log('藍牙適配器狀態變化', res);if (!res.available) {this.setData({ bluetoothStatus: '藍牙不可用' });this.stopBGM();} else if (res.discovering) {this.setData({ bluetoothStatus: '正在搜索設備...' });} else {this.setData({ bluetoothStatus: '藍牙已開啟' });}});},// 監聽BLE連接狀態變化onBLEConnectionStateChange() {wx.onBLEConnectionStateChange((res) => {console.log('BLE連接狀態變化', res);if (res.connected) {this.setData({ bluetoothStatus: `已連接: ${res.deviceId}`,connectedDeviceId: res.deviceId});this.playBGM();} else {this.setData({ bluetoothStatus: '藍牙已斷開',connectedDeviceId: null});this.stopBGM();}});},onUnload() {// 頁面卸載時停止搜索和斷開連接wx.stopBluetoothDevicesDiscovery();if (this.data.connectedDeviceId) {wx.closeBLEConnection({ deviceId: this.data.connectedDeviceId });}wx.closeBluetoothAdapter();// 停止音樂this.data.audioCtx.stop();this.data.audioCtx.destroy();}
});

5. index.json

json

{"usingComponents": {},"requiredBackgroundModes": ["audio", "bluetooth"]
}

關鍵點說明

  1. 權限配置:

    • app.json中配置requiredBackgroundModes以保證后臺運行權限

    • 需要用戶授權藍牙和音頻權限

  2. 藍牙流程:

    • 初始化藍牙適配器(openBluetoothAdapter)

    • 開始搜索設備(startBluetoothDevicesDiscovery)

    • 監聽發現設備(onBluetoothDeviceFound)

    • 連接設備(createBLEConnection)

    • 監聽連接狀態(onBLEConnectionStateChange)

  3. 音頻控制:

    • 使用wx.createInnerAudioContext創建音頻上下文

    • 連接成功時調用play()方法

    • 斷開連接時調用stop()方法

  4. 用戶體驗:

    • 顯示藍牙狀態變化

    • 連接/斷開時有Toast提示

    • 頁面卸載時清理資源

注意事項

  1. 真機測試:

    • 此功能必須在真機上測試,開發者工具可能無法完全模擬藍牙功能

  2. 音頻文件:

    • 將背景音樂文件放在/assets/目錄下

    • 確保音頻文件格式兼容(建議使用mp3格式)

  3. 藍牙限制:

    • iOS和Android的藍牙API有差異,需測試兼容性

    • 部分舊機型可能不支持某些藍牙功能

  4. 后臺播放:

    • 小程序進入后臺后可能會被暫停,需要合理配置后臺運行權限

  5. 用戶授權:

    • 首次使用藍牙功能時需要用戶授權

    • 處理用戶拒絕授權的場景

這個實現提供了完整的藍牙連接監聽和音頻自動播放功能,你可以根據實際需求進一步定制UI和交互邏輯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93786.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

XML 序列化與操作詳解筆記

一、XML 基礎概念XML&#xff08;eXtensible Markup Language&#xff0c;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;由 W3C 制定&#xff0c;具有以下特點&#xff1a;可擴展性&#xff1a;允許自定義標記&#xff08;如<Student>、<…

第八十四章:實戰篇:圖 → 視頻:基于 AnimateDiff 的視頻合成鏈路——讓你的圖片“活”起來,瞬間擁有“電影感”!

AI圖生視頻前言&#xff1a;從“剎那永恒”到“動態大片”——AnimateDiff&#xff0c;讓圖片“活”起來&#xff01;第一章&#xff1a;痛點直擊——靜態圖像到視頻&#xff0c;不是“幻燈片”那么簡單&#xff01;第二章&#xff1a;探秘“時間魔法”&#xff1a;AnimateDiff…

2025深大計算機考研復試經驗貼(已上岸)

如果你在初試出分前看到此貼 我建議&#xff1a; 準備機試和簡歷&#xff0c;即使你不估分&#xff1a;因為如果要準備春招的話&#xff0c;也總要刷題和做簡歷的。盡早估分&#xff0c;查一下往年的復試線&#xff0c;如果有望進復試&#xff0c;可盡早開始準備。 Preface …

用Pygame開發桌面小游戲:從入門到發布

一、引言 Pygame是一個基于Python的跨平臺游戲開發庫,它提供了簡單易用的圖形、聲音和輸入處理功能,非常適合新手入門游戲開發。本文將以"經典游戲合集"項目為例,帶你一步步了解如何使用Pygame開發、打包和發布自己的桌面小游戲。 二、開發環境搭建 安裝Python:…

CSS backdrop-filter:給元素背景添加模糊與色調的高級濾鏡

在現代網頁設計中&#xff0c;半透明元素搭配背景模糊效果已成為流行趨勢 —— 從毛玻璃導航欄、模態框遮罩&#xff0c;到卡片懸停效果&#xff0c;這種設計能讓界面更具層次感和高級感。實現這一效果的核心 CSS 屬性&#xff0c;正是backdrop-filter。它能對元素背后的內容&a…

檢索增強生成(RAG) 緩存增強生成(CAG) 生成中檢索(RICHES) 知識庫增強語言模型(KBLAM)

以下是當前主流的四大知識增強技術方案對比&#xff0c;涵蓋核心原理、適用場景及最新發展趨勢&#xff0c;為開發者提供清晰的技術選型參考&#xff1a; &#x1f50d; 一、RAG&#xff08;檢索增強生成&#xff09;?? 核心原理?&#xff1a; 動態檢索外部知識庫&#xff0…

LLM(大語言模型)的工作原理 圖文講解

目錄 1. 條件概率&#xff1a;上下文預測的基礎 2. LLM 是如何“看著上下文寫出下一個詞”的&#xff1f; 補充說明&#xff08;重要&#xff09; &#x1f4cc; Step 1: 輸入處理 &#x1f4cc; Step 2: 概率計算 &#x1f4cc; Step 3: 決策選擇 &#x1f914; 一個有…

Python netifaces 庫詳解:跨平臺網絡接口與 IP 地址管理

一、前言 在現代網絡編程中&#xff0c;獲取本機的網絡接口信息和 IP 配置是非常常見的需求。 例如&#xff1a; 開發一個需要選擇合適網卡的 網絡服務&#xff1b;在多網卡環境下實現 流量路由與控制&#xff1b;在系統診斷工具中展示 IP/MAC 地址、子網掩碼、默認網關&#x…

HTML應用指南:利用POST請求獲取上海黃金交易所金價數據

上海黃金交易所&#xff08;SGE&#xff09;作為中國唯一經國務院批準、專門從事黃金等貴金屬交易的國家級市場平臺&#xff0c;自成立以來始終秉持“公開、公平、公正”的原則&#xff0c;致力于構建規范、高效、透明的貴金屬交易市場體系。交易所通過完善的交易機制、嚴格的風…

C++常見面試題-1.C++基礎

一、C 基礎 1.1 語言特性與區別C 與 C 的主要區別是什么&#xff1f;C 為何被稱為 “帶類的 C”&#xff1f; 主要區別&#xff1a;C 引入了面向對象編程&#xff08;OOP&#xff09;特性&#xff08;類、繼承、多態等&#xff09;&#xff0c;而 C 是過程式編程語言&#xff1…

Tomcat里catalina.sh詳解

在 Tomcat 中&#xff0c;catalina.sh&#xff08;Linux/macOS&#xff09;或 catalina.bat&#xff08;Windows&#xff09;是 核心的啟動和關閉腳本&#xff0c;用于控制 Tomcat 服務器的運行。它是 Tomcat 的“主控腳本”&#xff0c;負責設置環境變量、啟動/關閉 JVM 進程&…

STM32之MCU和GPIO

一、單片機MCU 1.1 單片機和嵌入式 嵌入式系統 以計算機為核心&#xff0c;tips&#xff1a;計算機【處理單元&#xff0c;內存 硬盤】 可以控制的外部設備&#xff0c;傳感器&#xff0c;電機&#xff0c;繼電器 嵌入式開發 數據源--> 處理器(CPU MCU MPU) --> 執行器 …

22_基于深度學習的桃子成熟度檢測系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

數據結構:二叉樹oj練習

在講今天的題目之前&#xff0c;我們還需要講一下二叉樹的以下特點&#xff1a; 對任意一顆二叉樹&#xff0c;如果度為0的節點個數是n0&#xff0c;度為2的節點個數是n2&#xff0c;則有n0n21. 證明&#xff1a;二叉樹總的節點個數是n&#xff0c;那么有nn0n1n2 二叉樹的度為…

RabbitMQ高級特性——TTL、死信隊列、延遲隊列、事務、消息分發

目錄 一、TTL 1.1設置消息的TTL 1.2設置隊列的TTL 1.3兩者之間的區別 二、死信隊列 2.1死信的概念 2.2死信產生的條件&#xff1a; 2.3死信隊列的實現 死信隊列的工作原理 2.4常??試題 三、延遲隊列 3.1概念 3.2應用場景 3.3RabbitMQ 實現延遲隊列的核心原理 1…

神經網絡設計中關于BN歸一化(Normalization)的討論

在神經網絡的結構中&#xff0c;我們常常可以看見歸一化&#xff08;Normalization&#xff09;如BN的出現&#xff0c;無論是模型的backbone或者是neck的設計都與它有著重大的關系。 因此引發了我對它的思考&#xff0c;接下來我將從 是什么&#xff08;知識領域&#xff0c;誕…

MacOS 安全機制與“文件已損壞”排查完整指南

1. 背景說明macOS 為了保護系統安全&#xff0c;內置了多個安全機制&#xff1a;機制作用是否影響第三方 AppSIP (System Integrity Protection)保護系統關鍵文件/目錄不被篡改高風險 App/驅動可能受限Gatekeeper限制未簽名/未認證 App 運行阻止“未知開發者” App文件隔離屬性…

package.json文件中的devDependencies和dependencies對象有什么區別?

前端項目的package.json文件中&#xff0c;dependencies和devDependencies對象都用于指定項目所依賴的軟件包&#xff0c;但它們在項目的開發和生產環境中的使用有所不同。1.dependencies&#xff1a;dependencies是指定項目在生產環境中運行所需要的依賴項。這些依賴項通常包括…

【最新版】CRMEB Pro版v3.4系統源碼全開源+PC端+uniapp前端+搭建教程

一.系統介紹 crmebPro版 v3.4正式發布&#xff0c;智能任務推送、動態標簽管理、商城AI生產力&#xff0c;煥然一新&#xff0c;不負期待&#xff01;頁面DIY設計功能全面升級&#xff0c;組件更豐富&#xff0c;樣式設計更全面&#xff1b;移動端商家管理&#xff0c;讓商城管…

AI 浪潮下 IT 從業者的職業展望:替代之惑與轉型之道

一、引言1.1 科技變革的浪潮&#xff1a;AI 崛起與 IT 行業震蕩在當今科技飛速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;無疑是最具影響力的變革力量之一。從實驗室的前沿研究到廣泛的商業應用&#xff0c;AI 以驚人的速度滲透到各個領域&#xff0c;徹底改變…