E N D
Bluetooth làgì? • Bluetooth cho phép một thiết bị trao đổi dữ liệu khôngdâyvới các thiết bị Bluetooth khác. Khung ứng dụng cung cấp truy cập các chức năng Bluetooth thông qua Bluetooth Android APIs. Các APIs chophép các ứng dụng kết nối không dây với các thiết bị Bluetooth khác, cho phépkếtnốikhôngdâytheophươngthứcpoint-to-point và multipoint.
Đểtạomộtứngdụngbluetoothchúng ta cầnnhữnggì? Đểtạokếtnốibluetoothchúng ta sửdụnggóiandroid.bluetoothcósẵn. • android.bluetooth: Cung cấp các lớp quản lý chức năng Bluetooth, chẳng hạn như quét các thiết bịlâncậnđanghoạtđộng, kết nối với các thiết bị, và quản lý truyền dữ liệu giữa các thiết bị.
Góiandroid.bluetoothgồmcáclớpnào? • BluetoothAdapter:cho phép bạn thực hiện các nhiệm vụ Bluetooth cơ bản, chẳng hạn như bắt đầu phát hiện ra thiết bị, truy vấn một danh sách các kho ngoại quan (ghép nối) các thiết bị, tạo một BluetoothDevice bằng cách sử dụng một địa chỉ MAC được biết đến, và tạo ra một BluetoothServerSocket để lắng nghe yêu cầu kết nối từ các thiết bị khác. • BluetoothDevice cho phép bạn tạo một kết nối với các thiết bị, truy vấn thông tin về nó, chẳng hạn như tên, địa chỉ, lớp học, và nhà nước liên kết.
Góiandroid.bluetoothgồmcáclớpnào? • BluetoothServerSocketvàBluetoothSocket • Tạo một socket lắng nghe Bluetooth. • Làmộtinterfacecho Socket Bluetoothtương tự như TCP socketgồm:Socket và ServerSocket. Về phía máy chủ, sử dụng mộtBluetoothServerSocket để tạo ra mộtmáy chủ lắng nghe. Khi một kết nối được chấp nhận bởiBluetoothServerSocket, nó sẽ trả về mộtBluetoothSocketđể quản lý kết nối. Về phía máykhách, sử dụng một BluetoothSocket duy nhất cho cả hai bắt đầu một kết nối mớivà quản lý kết nối.
Góiandroid.bluetoothgồmcáclớpnào? • BluetoothClass: Đểxácđịnhthiếtbịđượckếtnối. • VD: điệnthoại, máytính, tai nghe… • Ngoàiracòncónhiềulớpphụkhácnhư: BluetoothProfile, BluetoothHeadset, BluetoothA2dp, BluetoothHealth, BluetoothHealthCallback, BluetoothHealthAppConfiguration, BluetoothProfile.ServiceListener
Cấpquyềnsửdụngbluetooth (Bluetooth Permissions) • Để sử dụng tính năng Bluetooth trong ứng dụng của bạn, bạn cần phải khai báo ít nhất một trong hai Bluetooth cho phép:BLUETOOTH và BLUETOOTH_ADMIN • Khaibáosửdụngbluetoothtrong file manifest.xmltrênứngdụngcủabạn:
Thiếtlậpbluetooth • Trước khi ứng dụng của bạn có thể giao tiếp qua Bluetooth, bạn cần phải xác minh rằng Bluetooth được hỗ trợ trên thiết bị, và nếu như vậy, đảm bảo rằng nó được kích hoạt. • XácnhậncácBluetoothAdapter • getDefaultAdapter() trảvềmộtBluetoothAdapterđạidiệnchobộphát Bluetooth củathiếtbị. • Nếu getDefaultAdapter() trả về nulltứclàthiết bị không hỗ trợ Bluetooth.
Thiếtlậpbluetooth • Kích hoạt tính năng Bluetooth: • isEnabled() kiểmtraxembluetoothcóđangđượcbậtkhông, nếulệnnàytrảvề false thìsẽyêucầuhệthốngkíchhoạtbluetooth qua lờigọistartActivityForResult() vớiACTION_REQUEST_ENABLE
Cácbướcđểtạomộtứngdụngbluetoothhoạtđộngtrênthiếtbị android • Quétcácthiếtbịbluetoothđanghoạtđộng. • Truy vấn các bộ chuyển đổi Bluetooth cho các thiết bị Bluetooth kết nối. • Thiếtlậpkênh RFCOMM. • Kếtnốitớicácthiếtbịđãđượctìmthấy. • Gửivànhậndữliệuvớithiếtbịđượckếtnối. • Quảnlýnhiềukếtnối.
Tìmthiếtbịđanghoạtđộng • SửdụngBluetoothAdapter, bạncóthểtìmthấycácthiếtbị Bluetooth đanghoạtđộnghoặcbằngcáchtruyvấndanhsáchcácthiếtbịđãđượcghépnốitrướcđó. • getBondedDevices(): truyvấnvàthiếtlậpkếtnốitớitấtcảthiếtbịđượctìmthấy. • Lấyđịachỉ Mac củathiếtbịtìmthấybằnglệnhdevice.getAdress() vàlưuvàomArrayAdapter(mảnglưutrữđịachỉ MAC cácthiếtbịđanghoạtđộng)
Discovering devices (khámpháthiếtbị) • ỨngdụngphảiđượcđăngkímộtBroadcastReceiverchomỗiACTION_FOUND mụcđíchnhậnthông tin từthiếtbịđượckếtnốitới. • Vớimỗithiếtbịđượctìmthấy ta cũngsẽlấyđịachỉ Mac vàlưuvàomArrayAdapter
ThiếtlậpthờigianchothiếtbịkháctìmthấythiếtbịcủabạnđanghoạtđộngThiếtlậpthờigianchothiếtbịkháctìmthấythiếtbịcủabạnđanghoạtđộng • Mặcđịnhthờigianchocácthiếtbịbluetoothlâncậntìmthấythiếtbịcủabạnđanghoạtđộnglà 120s tuynhiênbạncóthểthayđổithờigiannàytừgiátrị 0 -> 3600s bằngcáchthêmcác intent EXTRA_DISCOVERABLE_DURATION. Nếugiátrị 0 đượcthiếtlậptứclàthiếtbịcủabạnluônluônđượcpháthiện.
Kếtnốigiữa 2 thiếtbị • Giốngnhưlậptrình socket trên java trênkếtnốigiữa 2 thiếtbị qua bluetoothtrên android cũngsửdụngcơchế client – server. • KhimáychủvàmáykháchcóchungmộtkếtnốiBluetoothSockettrêncùngmộtkênhRFCOMM thì 2 thiếtbịđượckếtnốivớinhau. Lúcnàymỗithiếtbịcóthểchuyểngiaodữliệuchonhau.
server • MởmộtBluetoothServerSocketbởilờigọihàmlistenUsingRfcommWithServiceRecord(String, UUID) - String làtênbấtkìbạnmuốnđặtcóthểlàtênthiếtbị hay ứngdụngcủabạn. - UUID làmộtmã 128bit địnhdạnglàmộtchuỗi ID đểsửdụngxácđịnhthông tin hay xácđịnhứngdụngbluetoothcủabạn. • Bắtđầulắngnghevàchấpnhậnkếtnốibằnglờigọiaccept(). • Đóngkếtnốibằnglờigọiclose().
client • SửdụngBluetoothDevicenhậnmộtBluetoothSocketbởilờigọicreateRfcommSocketToServiceRecord(UUID). -khởitạomộtBluetoothSocketsẽkếtnốitớiBluetoothDevice. UUID phảiphùhợpvới UUID trên server khinómởkếtnốiBluetoothServerSocket • Bắtđầukếtnốibằngcáchgọiconnect(). - hệthốngsẽtựthựchiệntracứu SPD trêncácthiết bịtừxađểphùhợp UUID. Nếutracứuthànhcôngvà đượcchấpnhậnkếtnối, nósẽ chia sẻkênhRFCOMMsửdụngtrongkếtnốigiữa 2 thiếtbị.
Quảnlýmộtkếtnối Khibạnđãcómộtkếtnốigiữa 2 thiếtbịthànhcông. Lúcnàyđể chia sẻdữliệubạncầndùngBluetoothSocket • LấyInputStreamvàOutputStreamxửlývàtruyền qua socket, thông qua getInputStream()vàgetOutputStream(). • Đọcvàghidữliệuvớiread(byte[]) vàwite(byte[]).
Nguồnthamkhảo • http://developer.android.com/guide/topics/wireless/bluetooth.html