05 February 2014

BluetoothSPP - เปลี่ยนเรื่องบลูทูธให้เป็นเรื่องง่ายด้วย BluetoothSPP Library

Updated on
        บทความนี้เก่ามากแล้ว และหยุดพัฒนาต่อแล้ว

        สำหรับการรับส่งข้อมูลผ่านสัญญาณบลูทูธบนแอนดรอยด์นั้นจะนิยมใช้วิธีที่เรียกว่า Serial Port Profile (SPP) ซึ่งมีรูปแบบในการส่งข้อมูลเป็นแบบพอร์ตอนุกรม จึงเหมาะกับการใช้งานร่วมกับอุปกรณ์ภายนอกต่างๆที่ทำงานด้วยไมโครคอนโทรลเลอร์ เพราะบนไมโครคอนโทรลเลอร์จะมีขาสำหรับเชื่อมต่อแบบอนุกรมที่เรียกว่า UART ซึ่งสามารถนำมาใช้งานร่วมกับโมดูลบลูทูธเพื่อเชื่อมต่อกับแอนดรอยด์


        แต่ทั้งนี้ทั้งนั้นปัญหาหลักของนักพัฒนาส่วนใหญ่จะไม่ได้เป็นเพราะการเขียนโปรแกรมบนไมโครคอนโทรเลอร์แต่อย่างใด เพราะบนไมโครคอนโทรลเลอร์การใช้งาน UART เป็นหนึ่งในพื้นฐานของไมโครคอนโทรลเลอร์อยู่แล้ว สามารถเขียนได้ไม่ยากอีกทั้งยังมีไลบรารีให้นำมาใช้งานได้เลย อย่างเช่น บอร์ดต่างๆที่รองรับโปรแกรม Arduino (เจ้าของบล็อกใช้บอร์ด Unicon)

        ปัญหาที่ผู้ที่หลงเข้ามาอ่านหลายๆคนจะเจอกันก็คือ การเขียนเชื่อมต่อบลูทูธบนแอนดรอยด์นั้นยากพอตัว โค๊ดหยุบหยับสองสามไฟล์ถึงจะใช้งานได้ แถมใช้งานได้ก็ไม่สมบูรณ์มากนักต้องมีการปรับโค๊ดและเขียนอื่นๆเพิ่ม Bluetooth [Android Developer]

        เนื่องจากเจ้าของบล็อกใช้โค๊ดชุดนี้บ่อยพอควร บ้างก็งานเร่งรีบ บ้างก็งานชิวๆ แต่จะให้เขียนหลายครั้งก็ชวนขี้เกียจเหมือนกัน เพราะต้องมานั่งปรับนู่นนั่นนี่ทำให้เสียเวลาพอควร

        เจ้าของบล็อกเลยลองเขียนไลบรารีไว้ใช้งานเองซะเลย เพราะคิดว่าน่าจะยังไม่มีคนเขียนไลบรารี (ไม่รู้ว่ามีปะ เพราะไม่ได้ลองหาดู) ถ้าไม่อยากนั่งรอไลบรารีของคนอื่นมาใช้ ก็ต้องเป็นคนเขียนไลบรารีเองน่ะแหละ จึงเป็นที่มาของไลบรารี BluetoothSPP นั่นเอง



        สำหรับคลาส BluetoothSPP เจ้าของบล็อกเขียนมาเพื่อให้ผู้ที่หลงเข้ามาอ่านนำไปใช้งานให้ง่ายขึ้น เพราะเจ้าของบล็อกเห็นว่าส่วนใหญ่ที่อยากใช้งานบลูทูธแบบ SPP ส่วนมากจะเป็นมือใหม่ที่ยังเขียนแอนดรอยด์ไม่ค่อยเก่งมากนัก เป็นสายไมโครคอนโทรลเลอร์ที่เข้ามาลองสายแอนดรอยด์ซะมากกว่า จึงทำให้รู้สึกว่ายากขึ้นไปอีก โดย BluetoothSPP มีหน้าที่หลักๆดังนี้

        • เรียกใช้งานได้ง่าย (ย้ายความยุ่งยากของโค๊ดทั้งหมดไปไว้ในไลบรารี)

        • หมดปัญหาเรื่องข้อมูลที่รับมาแล้วไม่ต่อเนื่อง เพราะปกติแล้วจะมีผู้ที่หลงเข้ามาอ่านหลายคนมีปัญหากับเรื่องนี้ เพราะว่าเวลารับข้อมูลเช่น "ABCDEF" แอปพลิเคชันสามารถรับได้ปกติ แต่ว่าข้อมูลจะขาดช่วงเช่น ชุดแรกรับได้เป็น "AB" และตามด้วย "CDEF" อีกชุด ซึ่งไลบรารีตัวนี้จัดการปัญหานี้ไว้เรียบร้อยแล้ว

        • เวลาส่งข้อมูลใดๆไปยังอุปกรณ์อื่นๆจะต่อท้ายด้วย LF และ CR (0x0A และ 0x0D) เพื่อให้อุปกรณ์อย่างไมโครคอนโทรลเลอร์สามารถเช็คตัวปิดได้ ซึ่งเลือกที่จะใส่ LF กับ CR ต่อท้ายได้ ตอนใช้คำสั่งส่งข้อมูลจะมีให้กำหนด
     
        • ไม่ต้องเขียนหน้าเลือกอุปกรณ์ที่จะเชื่อมต่อ เจ้าของบล็อกเขียนไว้ให้แล้ว ผู้ที่หลงเข้ามาใช้งานก็เพียงแค่ใช้คำสั่ง Intent ไปยังหน้าที่ว่าก็พอ (แต่สามารถ Custom หน้าดังกล่าวได้ โดยไม่ต้องเขียนโค๊ดใหม่ แค่ทำหน้า Layout ตามที่กำหนดไว้ก็ใช้แทนได้แล้ว)

        • คำสั่งเชื่อมต่อบลูทูธโดยอัตโนมัติ สำหรับผู้ที่หลงเข้ามาใช้งานที่ต้องการให้เปิดแอปพลิเคชันขึ้นมาแล้วทำการเชื่อมต่อกับอุปกรณ์ที่กำหนดทันที โดยสามารถกำหนดส่วนใดส่วนหนึ่งของชื่อได้ แล้วจะทำการค้นหาจากชื่อที่เคยเชื่อมต่อไว้ว่ามีอุปกรณ์ตัวไหนที่มีชื่อตรงกับคำที่กำหนดไว้ แล้วจะทำการเชื่อมต่อทีละตัวไปเรื่อยๆ และเมื่อการเชื่อมต่อ ณ ตอนนั้นหยุด จะทำการเชื่อมต่ออัตโนมัติใหม่ตามคีย์เวิร์ดที่กำหนดไว้

        • Listener ที่เตรียมขึ้นมาเพื่ออำนวยความสะดวกในการใช้งาน เช่น เวลามีข้อมูลส่งเข้ามา บลูทูธทำการเชื่อมต่อหรือหยุดเชื่อมต่อ เป็นต้น


        สำหรับไลบรารี Bluetooth SPP สามารถดาวน์โหลดได้จาก

                BluetoothSPP [GitHub]

                BluetoothSPP [Google Drive]

                BluetoothSPP [Sleeping For Less]


        โดยจะมีคลาสให้เรียกใช้งานหลักๆด้วยกันทั้งหมดดังนี้

         • BluetoothSPP 
                 app.akexorcist.bluetoothspp.BluetoothSPP
                 คลาสหลักที่เอาไว้เรียกใช้งาน BluetoothSPP

         • BluetoothState
                 app.akexorcist.bluetoothspp.BluetoothState
                 คลาสที่เอาไว้เก็บค่าตัวแปรเพื่อเรียกใช้งาน

         • BluetoothStateListener
                 app.akexorcist.bluetoothspp.BluetoothSPP.BluetoothStateListener
                 คลาส Listener สำหรับเวลาที่ Service ของคลาสมีการเปลี่ยนสถานะ

         • BluetoothConnectionListener
                 app.akexorcist.bluetoothspp.BluetoothSPP.BluetoothConnectionListener
                 คลาส Listener สำหรับสถานะเชื่อมต่อกับอุปกรณ์บลูทูธต่างๆ

         • OnDataReceivedListener
                app.akexorcist.bluetoothspp.BluetoothSPP.OnDataReceivedListener
                คลาส Listener สำหรับรับข้อมูลที่ส่งมาจากอุปกรณ์ที่เชื่อมต่อ

         • AutoConnectionListener
                app.akexorcist.bluetoothspp.BluetoothSPP.AutoConnectionListener
                คลาส Listener สำหรับการเชื่อมต่อแบบอัตโนมัติ

         • DeviceList
                app.akexorcist.bluetoothspp.DeviceList
                คลาส Activity ที่เป็นหน้าเลือกอุปกรณ์ที่จะเชื่อมต่อแบบสำเร็จรูป


        การใช้งานคลาส BluetoothSPP สามารถประกาศได้ดังนี้

BluetoothSPP bt = new BluetoothSPP(this);
BluetoothSPP bt = new BluetoothSPP(ActiviyName.this);
BluetoothSPP bt = new BluetoothSPP(getApplicationContext());

        สามารถใช้งานแบบไหนก็ได้ตามแต่สะดวก


        โดย BluetoothSPP จะประกอบไปด้วยเมธอดดังนี้

BluetoothAdapter getBluetoothAdapter()

boolean isBluetoothAvailable()
boolean isBluetoothEnabled()

void enable()

void setupService()
void startService(boolean isAndroid)
void stopService()
int getServiceState()
boolean isServiceAvailable()

void setDeviceTarget(boolean isAndroid)

void connect(Intent data)
void connect(String address)
void disconnect()

boolean startDicoverty()
boolean isDicoverty()
boolean cancelDicoverty()

void setAutoConnectionListener(AutoConnectionListener listener)
void setBluetoothConnectionListener(BluetoothConnectionListener listener)
void setBluetoothStateListener(BluetoothStateListener listener)
void setOnDataReceivedListener(OnDataReceivedListener listener)

void send(byte[] data, boolean CRLF)
void send(String data, boolean CRLF)

String getConnectedDeviceName()
String getConnectedDeviceAddress()

String[] getPairedDeviceName()
String[] getPairedDeviceAddress()

void autoConnect(String keywordName)
void stopAutoConnect()
boolean isAutoConnecting()



• getBluetoothAdapter

        Description : รับข้อมูลของบลูทูธที่ใช้งานอยู่ ในรูปของคลาส Bluetooth Adapter

        Parameter : ไม่มี

        Return : คลาส Bluetooth Adapter ที่ใช้งานอยู่

        Method
BluetoothAdapter getBluetoothAdapter()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
BluetoothAdapter btAdapter = bt.getBluetoothAdapter();



isBluetoothAvailable

        Description : เอาไว้ตรวจสอบว่าเครื่องรองรับบลูทูธหรือไม่

        Parameter : ไม่มี

        Return : Boolean โดยเป็น True เมื่อเครื่องรองรับ และเป็น False เมื่อไม่รองรับ

        Method
boolean isBluetoothAvailable()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean isAvailable = bt.isBluetoothAvailable();



isBluetoothEnabled 

        Description : เอาไว้ตรวจสอบว่าเครื่องได้เปิดใช้งานบลูทูธอยู่หรือไม่

        Parameter : ไม่มี

        Return : Boolean โดยเป็น True เมื่อบลูทูธเปิดอยู่ และเป็น False เมื่อปิดอยู่

        Method
boolean isBluetoothEnabled()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean isEnabled= bt.isBluetoothEnabled();



• enable

        Description : เอาไว้สั่งให้เครื่องทำการเปิดใช้งานบลูทูธทันที ซึ่งไม่ค่อยแนะนำมากนัก แนะนำให้ใช้วิธี Intent ไปที่ System ของบลูทูธเพื่อให้ผู้ใช้เปิดเองดีกว่า แต่เมธอดนี้ใส่เผื่อไว้เฉยๆ

        Parameter : ไม่มี

        Return : ไม่มี

        Method
void enable()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.enable();



setupService

        Description : กำหนดค่าให้กับ Service ของ BluetoothSPP

        Parameter : ไม่มี

        Return : ไม่มี

        Method
void setupService()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.setupService();



startService

        Description : ให้ Service ของ BluetoothSPP เริ่มทำงาน

        Parameter : isAndroid เป็นตัวแปร Boolean เพื่อกำหนดว่าอุปกรณ์ที่เชื่อมต่อเป็นอุปกรณ์แอนดรอยด์หรืออย่างอื่น ให้กำหนดเป็น BluetoothState.DEVICE_ANDROID หรือ BluetoothState.DEVICE_OTHER

        Return : ไม่มี

        Method
void startService(boolean isAndroid)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.startService(BluetoothState.DEVICE_ANDROID);



stopService

        Description : ให้ Service ของ BluetoothSPP หยุดทำงาน

        Parameter : ไม่มี

        Return : ไม่มี

        Method
void stopService()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.stopService();



getServiceState

        Description : รับค่าสถานะของ Service ของ BluetoothSPP ว่าอยู่ในสถานะใด

        Parameter : ไม่มี

        Return : Integer โดยค่าที่ได้จะมีค่าเท่ากับ
                BluetoothState.STATE_NONE : Service ยังไม่ได้ทำอะไร
                BluetoothState.STATE_LISTEN : Service รอการเชื่อมต่อ
                BluetoothState.STATE_CONNECTING : เชื่อมต่อกับอุปกรณ์ที่กำหนด
                BluetoothState.STATE_CONNECTED : เชื่อมต่อกับอุปกรณ์แล้ว
                BluetoothState.STATE_NULL : Service เป็น Null

        Method
int getServiceState()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
int service_state = bt.getServiceState();



isServiceAvailable

        Description : ตรวจสอบว่า Service ของ BluetoothSPP สามารถใช้งานได้หรือไม่

        Parameter : ไม่มี

        Return : Boolean โดยเป็น True ถ้า Service พร้อมใช้งาน และเป็น False เมื่อยังไม่พร้อม

        Method
boolean isServiceAvailable()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean isAvailable = bt.isServiceAvailable();



setDeviceTarget

        Description : กำหนดอุปกรณ์ที่ต้องการเชื่อมต่อว่าจะเป็นอุปกรณ์แอนดรอยด์หรืออย่างอื่น

        Parameter : isAndroid เป็นตัวแปร Boolean เพื่อกำหนดว่าอุปกรณ์ที่เชื่อมต่อเป็นอุปกรณ์แอนดรอยด์หรืออย่างอื่น ให้กำหนดเป็น BluetoothState.DEVICE_ANDROID หรือ BluetoothState.DEVICE_OTHER

        Return : ไม่มี

        Method
void setDeviceType(boolean isAndroid)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.setDeviceTarget(BluetoothState.DEVICE_OTHER);



connect - Intent

        Description : เชื่อมต่อกับอุปกรณ์ที่กำหนด (ใช้ร่วมกับ DeviceActivity)

        Parameter : Intent ที่มาจากหน้าเลือกอุปกรณ์ (DeviceActivity) ที่อยู่ในคลาส BluetoothSPP แล้วนำไปใช้เชื่อมต่อบลูทูธ

        Return : ไม่มี

        Method
void connect(Intent data)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
Intent intent = ....;
bt.connect(intent);



connect - String

        Description : เชื่อมต่อกับอุปกรณ์ที่กำหนด

        Parameter : String ที่เป็นค่า Address ของบลูทูธเครื่องนั้นๆ

        Return : ไม่มี

        Method
void connect(String address)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.connect("0A:1B:2C:3D:4E:5F");



disconnect

        Description : หยุดการเชื่อมต่อกับอุปกรณ์ที่เชื่อมต่ออยู่

        Parameter : ไม่มี

        Return : ไม่มี

        Method
void disconnect()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.disconnect();



 startDiscovery

        Description : เปิด Discovery เพื่อให้อุปกรณ์อื่นๆสามารถค้นหาเจอ

        Parameter : ไม่มี

        Return : Boolean สถานะของการเปิด Discovery โดย True คือสำเร็จและ False คือมีปัญหา

        Method
boolean startDiscovery()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean state = bt.startDiscovery();



 isDiscovery

        Description : ตรวจสอบว่าเปิด Discovery ไว้อยู่หรือป่าว

        Parameter : ไม่มี

        Return : Boolean สถานะของ Discovery โดย True คือเปิดอยู่และ False คือปิดอยู่

        Method
boolean isDiscovery()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean state = bt.isDiscovery();



• cancelDiscovery

        Description : ยกเลิก Discovery

        Parameter : ไม่มี

        Return : Boolean สถานะของการปิด Discovery โดย True คือสำเร็จและ False คือมีปัญหา

        Method
boolean cancelDiscovery()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean state = bt.cancelDiscovery();



send - Byte Array

        Description : ส่งข้อมูลผ่านบลูทูธเป็นข้อมูลแบบ Byte Array

        Parameter : Byte[] ข้อมูล Byte ที่ต้องการส่ง และ ฺBoolean กำหนดว่าจะส่ง CR LF ต่อท้ายหรือไม่

        Return : ไม่มี

        Method
void send(byte[] data, boolean CRLF)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.send(new byte[] { 0x30, 0x41 }, false);



send - String

        Description : ส่งข้อมูลผ่านบลูทูธเป็นข้อมูลแบบ ASCII String

        Parameter : String ข้อมูล ASCII String ที่ต้องการส่ง และ Boolean กำหนดว่าจะส่ง CR LF ต่อท้ายหรือไม่

        Return : ไม่มี

        Method
void send(String data, boolean CRLF)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.send("Message from android device", true);



getConnectedDeviceName

        Description : รับชื่ออุปกรณ์ที่เชื่อมต่ออยู่ ณ ตอนนั้น

        Parameter : ไม่มี

        Return : String ชื่ออุปกรณ์บลูทูธนั้นๆ ถ้าไม่ได้เชื่อมต่อจะเป็น Null

        Method
String getConnectedDeviceName()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
String name = bt.getConnectedDeviceName();



getConnectedDeviceAddress

        Description : รับ Address ของอุปกรณ์ที่เชื่อมต่ออยู่ ณ ตอนนั้น

        Parameter : ไม่มี

        Return : String ของ Address อุปกรณ์บลูทูธนั้นๆ ถ้าไม่ได้เชื่อมต่อจะเป็น Null

        Method
String getConnectedDeviceAddress()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
String address = bt.getConnectedDeviceAddress();



getPairedDeviceName

        Description : รับรายชื่ออุปกรณ์ที่เคยจับคู่ไว้

        Parameter : ไม่มี

        Return : String[] สำหรับชื่ออุปกรณ์ทั้งหมดที่เคยจับคู่

        Method
String[] getPairedDeviceName()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
String[] list_name = bt.getPairedDeviceName();



getPairedDeviceAddress

        Description : รับรายชื่อ Address ของอุปกรณ์ที่เคยจับคู่ไว้

        Parameter : ไม่มี

        Return : String[] สำหรับ Address ของอุปกรณ์ทั้งหมดที่เคยจับคู่

        Method
String[] getPairedDeviceAddress()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
String[] list_address = bt.getPairedDeviceAddress();



autoConnect

        Description : เปิดใช้งานการเชื่อมต่ออัตโนมัติ

        Parameter : String สำหรับ Keyword ให้กับอุปกรณ์ที่ต้องการให้เชื่อมต่ออัตโนมัติ

        Return : ไม่มี

        Method
void autoConnect(String keywordName)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.autoConnect("BlueStick");



stopAutoConnect

        Description : หยุดการเชื่อมต่ออัตโนมัติ

        Parameter : ไม่มี

        Return : ไม่มี

        Method
void stopAutoConnect()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.stopAutoConnect();



isAutoConnecting

        Description : ตรวจสอบสถานะว่าการเชื่อมต่ออัตโนมัติทำงานอยู่หรือไม่

        Parameter : ไม่มี

        Return : Boolean ถ้าเป็น True เวลาเชื่อมต่ออัตโนมัติอยู่ และเป็น False ถ้าไม่ใช่

        Method
boolean isAutoConnecting()

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
boolean isAuto = bt.isAutoConnecting();



setAutoConnectionListener

        Description : กำหนด Listener สำหรับการเชื่อมต่ออัตโนมัติ

        Parameter : Listener จากคลาส AutoConnectionListener

        Return : ไม่มี

        Callback :
                onNewConnection : เมื่อทำการเชื่อมต่ออุปกรณ์ตัวใดๆ
                        โดยมี Parameter เป็น String ของ Name และ
                        Address ของเครื่องที่จะเชื่อมต่อ
                onAutoConnectionStarted : เมื่อเริ่มทำการเชื่อมต่ออัตโนมัติ

        Method
void setAutoConnectionListener(AutoConnectionListener listener)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.setAutoConnectionListener(new AutoConnectionListener() {
    public void onNewConnection(String name, String address) {
        ...
    }

    public void onAutoConnectionStarted() {
        ...
    }
}



setBluetoothConnectionListener

        Description : กำหนด Listener สำหรับการเชื่อมต่อบลูทูธ

        Parameter : Listener จากคลาส BluetoothConnectionListener

        Return : ไม่มี

        Callback :
                onDeviceConnected : เมื่อเชื่อมต่อกับอุปกรณ์สำเร็จ โดยมี Parameter เป็น String ของ Name และ Address ของเครื่องที่เชื่อมต่อได้สำเร็จ
                onDeviceDisconnected : เมื่อยกเลิกเชื่อมต่อกับอุปกรณ์ที่เชื่อมต่ออยู่
                onDeviceConnectionFailed : เมื่อเชื่อมต่อกับอุปกรณ์ไม่สำเร็จ

        Method
void setBluetoothConnectionListener(BluetoothConnectionListener listener)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.setBluetoothConnectionListener(new BluetoothConnectionListener() {
    public void onDeviceConnected(String name, String address) {
        ...
    }

    public void onDeviceDisconnected() {
        ...
    }

    public void onDeviceConnectionFailed() {
        ...
    }
}



setBluetoothStateListener

        Description : กำหนด Listener สำหรับสถานะ Service ของ BluetoothSPP

        Parameter : Listener จากคลาส BluetoothStateListener

        Return : ไม่มี

        Callback :
                onServiceStateChanged : เมื่อ Service มีการเปลี่ยนแปลงสถานะ
                        โดยมี Parameter เป็น Integer สำหรับค่าสถานะที่เปลี่ยนแปลง
                        BluetoothState.STATE_NONE : Service ยังไม่ได้ทำอะไร
                        BluetoothState.STATE_LISTEN : Service รอการเชื่อมต่อ
                        BluetoothState.STATE_CONNECTING : เชื่อมต่อกับอุปกรณ์ที่กำหนด
                        BluetoothState.STATE_CONNECTED : เชื่อมต่อกับอุปกรณ์แล้ว
                        BluetoothState.STATE_NULL : Service เป็น Null

        Method
void setBluetoothStateListener(BluetoothStateListener listener)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.setBluetoothStateListener(new BluetoothStateListener() {
    public void onServiceStateChanged(int state) {
        ...
    }
}



setOnDataReceivedListener

        Description : กำหนด Listener สำหรับการรับข้อมูลที่ส่งเข้ามาทางบลูทูธ

        Parameter : Listener จากคลาส DataReceivedListener

        Return : ไม่มี

        Callback :
                onDataReceived : เมื่อมีข้อมูลส่งเข้ามาทางบลูทูธ
                        โดยมี Parameter สองตัวคือ Byte[] กับ String
                        ซึ่ง Byte[] คือข้อมูลที่อยู่ในรูป Byte Array
                        ส่วน String คือข้อมูลที่อยู่ในรูป ASCII String

        Method
void setOnDataReceivedListener(OnDataReceivedListener listener)

        Example
BluetoothSPP bt = new BluetoothSPP(this);
...
...
...
bt.setOnDataReceivedListener(new OnDataReceivedListener () {
    public void onDataReceived(byte[] data, String message) {
        ...
    }
}


        นี่ก็คือเมธอดทั้งหมดที่มีให้เรียกใช้งานในคลาส BluetoothSPP ที่เจ้าของบล็อกเขียนขึ้นมา ส่วนวิธีการใช้งานเจ้าของบล็อกจะทยอยทำบทความการใช้งานต่างๆสำหรับคลาสตัวนี้ให้เรื่อยๆ

        ซึ่งตอนนี้พึ่งได้บทความเดียวเท่านั้น เป็นการใช้งานเบื้องต้น [Android Code] การเชื่อมต่ออุปกรณ์ผ่านบลูทูธแบบง่ายๆโดยใช้ BluetoothSPP ไว้จะทยอยเพิ่มเข้ามาให้เรื่อยๆนะครับ


        สำหรับไฟล์ Library ของ BluetoothSPP สามารถดาวน์โหลดได้ที่

                BluetoothSPP [GitHub]

                BluetoothSPP [Google Drive]

                BluetoothSPP [Sleeping For Less]


        ถ้ามีปัญหาระหว่างการใช้งานยังไงก็บอกเจ้าของบล็อกได้ แต่ถ้ามาถามว่าทำแบบนั้นนู้นนี้ยังไง เจ้าของบล็อกขอผ่านละกันนะ รอติดตามบทความเพิ่มเติมไปละกัน



บทความที่เกี่ยวข้อง

        • การเชื่อมต่ออุปกรณ์ผ่านบลูทูธแบบง่ายๆโดยใช้ BluetoothSPP
        • การใช้งาน Listener สำหรับบลูทูธใน BluetoothSPP
        • การใช้งานการเชื่อมต่ออัตโนมัติในคลาส BluetoothSPP
        • การสร้างหน้าเลือกอุปกรณ์ที่จะเชื่อมต่อสำหรับ BluetoothSPP