Android实现的简单蓝牙程序示例
本文实例讲述了Android实现的简单蓝牙程序。分享给大家供大家参考,具体如下:
我将在这篇文章中介绍了的Android蓝牙程序。这个程序就是将实现把手机变做电脑PPT播放的遥控器:用音量加和音量减键来控制PPT页面的切换。
遥控器服务器端
首先,我们需要编写一个遥控器的服务器端(支持蓝牙的电脑)来接收手机端发出的信号。为了实现这个服务器端,我用到了一个叫做Bluecove(专门用来为蓝牙服务的!)的Java库。
以下是我的RemoteBluetoothServer类:
publicclassRemoteBluetoothServer{
publicstaticvoidmain(String[]args){
ThreadwaitThread=newThread(newWaitThread());
waitThread.start();
}
}
在主方法中创建了一个线程,用于连接客户端,并处理信号。
publicclassWaitThreadimplementsRunnable{
/**Constructor*/
publicWaitThread(){
}
@Override
publicvoidrun(){
waitForConnection();
}
/**Waitingforconnectionfromdevices*/
privatevoidwaitForConnection(){
//retrievethelocalBluetoothdeviceobject
LocalDevicelocal=null;
StreamConnectionNotifiernotifier;
StreamConnectionconnection=null;
//setuptheservertolistenforconnection
try{
local=LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
UUIDuuid=newUUID(80087355);//"04c6093b-0000-1000-8000-00805f9b34fb"
Stringurl="btspp://localhost:"+uuid.toString()+";name=RemoteBluetooth";
notifier=(StreamConnectionNotifier)Connector.open(url);
}catch(Exceptione){
e.printStackTrace();
return;
}
//waitingforconnection
while(true){
try{
System.out.println("waitingforconnection...");
connection=notifier.acceptAndOpen();
ThreadprocessThread=newThread(newProcessConnectionThread(connection));
processThread.start();
}catch(Exceptione){
e.printStackTrace();
return;
}
}
}
}
在waitForConnection()中,首先将服务器设为可发现的,并为这个程序创建了UUID(用于同客户端通信);然后就等待来自客户端的连接请求。当它收到一个初始的连接请求时,将创建一个ProcessConnectionThread来处理来自客户端的命令。以下是ProcessConnectionThread的代码:
publicclassProcessConnectionThreadimplementsRunnable{
privateStreamConnectionmConnection;
//Constantthatindicatecommandfromdevices
privatestaticfinalintEXIT_CMD=-1;
privatestaticfinalintKEY_RIGHT=1;
privatestaticfinalintKEY_LEFT=2;
publicProcessConnectionThread(StreamConnectionconnection)
{
mConnection=connection;
}
@Override
publicvoidrun(){
try{
//preparetoreceivedata
InputStreaminputStream=mConnection.openInputStream();
System.out.println("waitingforinput");
while(true){
intcommand=inputStream.read();
if(command==EXIT_CMD)
{
System.out.println("finishprocess");
break;
}
processCommand(command);
}
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*Processthecommandfromclient
*@paramcommandthecommandcode
*/
privatevoidprocessCommand(intcommand){
try{
Robotrobot=newRobot();
switch(command){
caseKEY_RIGHT:
robot.keyPress(KeyEvent.VK_RIGHT);
System.out.println("Right");
break;
caseKEY_LEFT:
robot.keyPress(KeyEvent.VK_LEFT);
System.out.println("Left");
break;
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
ProcessConnectionThread类主要用于接收并处理客户端发送的命令。需要处理的命令只有两个:KEY_RIGHT和KEY_LEFT。我用java.awt.Robot来生成电脑端的键盘事件。
以上就是服务器端所需要做的工作。
遥控器客户端
这里的客户端指的其实就是Android手机。在开发手机端代码的过程中,我参考了AndroidDevGuide中BluetoothChat这个程序的代码,这个程序在SDK的示例代码中可以找到。
要将客户端连接服务器端,那么必须让手机可以扫描到电脑,DeviceListActivity类的工作就是扫描并连接服务器。BluetoothCommandService类负责将命令传至服务器端。这两个类与BluetoothChat中的内容相似,只是删除了BluetoothChat中的BluetoothCommandService中的AcceptThread,因为客户端不需要接受连接请求。ConnectThread用于初始化与服务器的连接,ConnectedThread用于发送命令。
RemoteBluetooth是客户端的主activity,其中主要代码如下:
protectedvoidonStart(){
super.onStart();
//IfBTisnoton,requestthatitbeenabled.
//setupCommand()willthenbecalledduringonActivityResult
if(!mBluetoothAdapter.isEnabled()){
IntentenableIntent=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent,REQUEST_ENABLE_BT);
}
//otherwisesetupthecommandservice
else{
if(mCommandService==null)
setupCommand();
}
}
privatevoidsetupCommand(){
//InitializetheBluetoothChatServicetoperformbluetoothconnections
mCommandService=newBluetoothCommandService(this,mHandler);
}
onStart()用于检查手机上的蓝牙是否已经打开,如果没有打开则创建一个Intent来打开蓝牙。setupCommand()用于在按下音量加或音量减键时向服务器发送命令。其中用到了onKeyDown事件:
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode==KeyEvent.KEYCODE_VOLUME_UP){
mCommandService.write(BluetoothCommandService.VOL_UP);
returntrue;
}
elseif(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){
mCommandService.write(BluetoothCommandService.VOL_DOWN);
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
此外,还需要在AndroidManifest.xml加入打开蓝牙的权限的代码。
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permissionandroid:name="android.permission.BLUETOOTH"/>
以上就是客户端的代码。
将两个程序分别在电脑和手机上安装后,即可实现用手机当作一个PPT遥控器了!
PS:关于AndroidManifest.xml详细内容可参考本站在线工具:
AndroidManifest功能与权限描述大全:
http://tools.jb51.net/table/AndroidManifest
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。