转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 (mCommandService==null) 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
相关推荐
这个程序展示了如何利用Android SDK中的蓝牙API来创建一个简单的聊天应用,对于开发者来说,是深入理解Android蓝牙编程的一个良好起点。 首先,Android的蓝牙API主要包括`BluetoothAdapter`、`BluetoothDevice`、`...
本项目“Android蓝牙遥控小车”就是这样一个典型的应用实例,它结合了Android移动开发技术与51单片机控制,实现了通过手机远程控制小车的运行。下面我们将深入探讨该项目涉及的主要知识点。 一、Android应用开发 ...
总的来说,"android bluetooth demo 蓝牙样例"是一个非常实用的学习资源,它涵盖了Android蓝牙开发的基本流程和关键点。通过这个示例,开发者能够快速上手并创建自己的蓝牙应用程序,无论是简单的文件传输还是复杂的...
在本压缩包中,我们拥有一个关于Android应用的源码示例,具体是实现安卓设备间的蓝牙对战功能。这个实例对于理解如何在Android平台上...这是一个很好的实践项目,有助于提升开发者在Android蓝牙应用开发方面的能力。
在"Bluetooth-master"这个项目中,我们可以看到一个简单的蓝牙搜索与连接的示例实现,它包含了上述所有关键步骤。这个demo的代码结构清晰,便于理解和移植到其他项目中。通过研究这个项目,开发者可以快速掌握...
现在很多电脑提供了蓝牙支持,很多笔记本网卡也集成了蓝牙功能,也可以采用USB蓝牙方便的连接手机等蓝牙设备进行通信。 操作蓝牙要使用类库InTheHand.Net.Personal 首先在项目中引用该类库; static void Main...
在Android平台上进行应用程序开发时,Android Studio是Google官方推荐的...通过深入研究和理解这个BTClient Demo,开发者可以掌握Android蓝牙通信的基本原理和实践技巧,为自己的应用添加蓝牙通信功能打下坚实基础。
这里我们将深入探讨Android Bluetooth API的使用,以及如何构建一个简单的蓝牙客户端(BTClient)。 1. **Android Bluetooth API**: Android提供了`BluetoothAdapter`,`BluetoothDevice`,`...
总之,利用Android Studio构建一个与HC05蓝牙模块交互的应用,涉及了Android蓝牙API的使用、UI设计、服务编写以及异常处理等多个方面。这个程序具有高度可扩展性,可以方便地添加新的功能或控件,以满足不同的硬件...
我将在这篇文章中介绍了的Android蓝牙程序。这个程序就是将实现把手机变做电脑PPT播放的遥控器:用音量加和音量减键来控制PPT页面的切换。 遥控器服务器端 首先,我们需要编写一个遥控器的服务器端(支持蓝牙的电脑...
Android 蓝牙 单片机 波形显示 本文档主要涉及 Android 蓝牙 操作、波形显示、串口通信等技术...本文档提供了一个完整的 Android 蓝牙 应用开发实例,涉及到蓝牙操作、串口通信、波形显示等技术,具有很高的参考价值。
在本实例中,我们将探讨如何在AC8257平台上实现一个基于HIDL的简单服务。AC8257是一款常用的无线通信芯片,常用于移动设备中,提供Wi-Fi和蓝牙等功能。通过HIDL,我们可以创建一个抽象层,使得Android系统能够与该...
实例130: 一个简单的贪吃蛇游戏 498 实例131: 开发一个魔塔游戏 504 实例132: 疯狂足球游戏 524 第13章 Android程序优化 547 实例133: 测试计算机的性能 547 实例134: 测试内存性能 550 实例135: 优化...
【Android设备蓝牙连接聊天Demo】是一个面向Android平台的示例应用,它展示了如何实现设备间的蓝牙通信,允许用户进行简单的文字聊天。这个项目是为Android开发者设计的,旨在帮助他们理解蓝牙连接的基本原理和实现...
"BluetoothChat"可能是项目中的一个示例应用,它可能包含了一个简单的蓝牙聊天功能。这样的示例通常会涵盖蓝牙设备搜索、连接、数据传输和断开连接的完整流程,对于学习和理解蓝牙串口通信十分有帮助。 8. **性能...
本文将介绍 Android 传感器编程实例开发的基本概念和步骤,并通过一个简单的示例项目,演示如何使用 Android 传感器来采集三轴数据。 一、Android 传感器编程概述 Android 传感器编程是指使用 Android 平台提供的...
在Android中,实现Wi-Fi打印主要依赖于`Android Print Framework`,这是一个系统级的服务,为应用程序提供了打印接口。以下是实现Wi-Fi打印的关键步骤: 1. **添加权限**:在AndroidManifest.xml文件中添加必要的...
总结起来,BluetoothChat是一个极好的学习蓝牙通信的实例,它展示了如何在Android平台上构建一个简单的蓝牙聊天应用。通过理解并实践这个源码,开发者可以掌握蓝牙API的使用、服务组件的创建、线程管理和数据传输等...