一个简略有用的Android蓝牙程序实例ITeye - AG环亚娱乐集团

一个简略有用的Android蓝牙程序实例ITeye

2019年03月10日11时33分58秒 | 作者: 澎湃 | 标签: 一个,蓝牙,程序 | 浏览: 2039

转http://blog.csdn.net/pku_android/article/details/7430849

我将在这篇文章中介绍了的Android蓝牙程序。这个程序就是将完成把手机变做电脑PPT播映的遥控器:用音量加和音量减键来操控PPT页面的切换。

遥控器效劳器端

首要,咱们需求编写一个遥控器的效劳器端(支撑蓝牙的电脑)来接纳手机端宣布的信号。为了完成这个效劳器端,我用到了一个叫做Bluecove(专门用来为蓝牙效劳的!)的Java库。

以下是我的RemoteBluetoothServer类:

public class RemoteBluetoothServer{
 public static void main(String[] args) {
 Thread waitThread = new Thread(new WaitThread());
 waitThread.start();

 在主办法中创立了一个线程,用于衔接客户端,并处理信号。

public class WaitThread implements Runnable{
 /** Constructor */
 public WaitThread() {
 @Override
 public void run() {
 waitForConnection();
 /** Waiting for connection from devices */
 private void waitForConnection() {
 // retrieve the local Bluetooth device object
 LocalDevice local = null;
 StreamConnectionNotifier notifier;
 StreamConnection connection = null;
 // setup the server to listen for connection
 try {
 local = LocalDevice.getLocalDevice();
 local.setDiscoverable(DiscoveryAgent.GIAC);
 UUID uuid = new UUID(80087355); // "04c6093b-0000-1000-8000-00805f9b34fb"
 String url = "btspp://localhost:" + uuid.toString() + ";name=RemoteBluetooth";
 notifier = (StreamConnectionNotifier)Connector.open(url);
 } catch (Exception e) {
 e.printStackTrace();
 return;
 // waiting for connection
 while(true) {
 try {
 System.out.println("waiting for connection...");
 connection = notifier.acceptAndOpen();
 Thread processThread = new Thread(new ProcessConnectionThread(connection));
 processThread.start();
 } catch (Exception e) {
 e.printStackTrace();
 return;

 在waitForConnection()中,首要将效劳器设为可发现的,并为这个程序创立 了UUID(用于同客户端通讯);然后就等候来自客户端的衔接恳求。当它收到一个初始的衔接恳求时,将创立一个 ProcessConnectionThread来处理来自客户端的指令。以下是ProcessConnectionThread的代码:

public class ProcessConnectionThread implements Runnable{
 private StreamConnection mConnection;
 // Constant that indicate command from devices
 private static final int EXIT_CMD = -1;
 private static final int KEY_RIGHT = 1;
 private static final int KEY_LEFT = 2;
 public ProcessConnectionThread(StreamConnection connection)
 mConnection = connection;
 @Override
 public void run() {
 try {
 // prepare to receive data
 InputStream inputStream = mConnection.openInputStream();
 System.out.println("waiting for input");
 while (true) {
 int command = inputStream.read();
 if (command  EXIT_CMD)
 System.out.println("finish process");
 break;
 processCommand(command);
 } catch (Exception e) {
 e.printStackTrace();
 * Process the command from client
 * @param command the command code
 private void processCommand(int command) {
 try {
 Robot robot = new Robot();
 switch (command) {
 case KEY_RIGHT:
 robot.keyPress(KeyEvent.VK_RIGHT);
 System.out.println("Right");
 break;
 case KEY_LEFT:
 robot.keyPress(KeyEvent.VK_LEFT);
 System.out.println("Left");
 break;
 } catch (Exception e) {
 e.printStackTrace();

 

ProcessConnectionThread类首要用于接纳并处理客户端发送的指令。需求处理的指令只要两个:KEY_RIGHT和KEY_LEFT。我用java.awt.Robot来生成电脑端的键盘事情。

 

以上就是效劳器端所需求做的作业。

 

遥控器客户端

这儿的客户端指的其实就是Android手机。在开发手机端代码的过程中,我参阅了 Android Dev Guide中Bluetooth Chat这个程序的代码,这个程序在SDK的示例代码中能够找到。

 

要将客户端衔接效劳器端,那么有必要让手机能够扫描到电 脑,DeviceListActivity 类的作业就是扫描并衔接效劳器。BluetoothCommandService类担任将指令传至效劳器端。 这两个类与Bluetooth Chat中的内容类似,仅仅删除了Bluetooth Chat中的BluetoothCommandService中的AcceptThread ,由于客户端不需求承受衔接恳求。 ConnectThread用于初始化与效劳器的衔接,ConnectedThread 用于发送指令。

RemoteBluetooth 是客户端的主activity,其间首要代码如下:

protected void onStart() {
 super.onStart();
 // If BT is not on, request that it be enabled.
 // setupCommand() will then be called during onActivityResult
 if (!mBluetoothAdapter.isEnabled()) {
 Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
 startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
 // otherwise set up the command service
 else {
 if (mCommandServicenull)
 setupCommand();
private void setupCommand() {
 // Initialize the BluetoothChatService to perform bluetooth connections
 mCommandService = new BluetoothCommandService(this, mHandler);

 onStart()用于查看手机上的蓝牙是否现已翻开,假如没有翻开则创立一个Intent来翻开蓝牙。setupCommand()用于在按下音量加或音量减键时向效劳器发送指令。其间用到了onKeyDown事情:

public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode  KeyEvent.KEYCODE_VOLUME_UP) {
 mCommandService.write(BluetoothCommandService.VOL_UP);
 return true;
 else if (keyCode  KeyEvent.KEYCODE_VOLUME_DOWN){
 mCommandService.write(BluetoothCommandService.VOL_DOWN);
 return true;
 return super.onKeyDown(keyCode, event);

 此外,还需求在AndroidManifest.xml参加翻开蓝牙的权限的代码。

 uses-permission android:name="android.permission.BLUETOOTH_ADMIN" / 
 uses-permission android:name="android.permission.BLUETOOTH" / 

 

以上就是客户端的代码。

 

将两个程序分别在电脑和手机上装置后,即可完成用手机当作一个PPT遥控器了!

 

参阅文献:

http://developer.android.com/guide/topics/wireless/bluetooth.html

http://developer.android.com/resources/samples/BluetoothChat/index.html

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章