资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
一直以来都想利用手机来控制一些东西,比如电灯,电风扇等家电或者智能小车等.驱动蓝牙模块可以在 Activity 中直接调用 ,也可以在多线程下直接使用,但这样会存在一个缺陷: 当你按下手机的 Home 或者 Back 键的时候.程序退出了,下次你重新启动软件的时候又需要重新建立蓝牙的链接了.为了克服以上问题,我把蓝牙模块的调用放到 Service 里面使用. 首先对 Service 说明下:(来源于 http:/www.eoeandroid.com/thread-179907-1-1.html)Service 介绍 Android 中的服务和 windows 中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。 由于没有可视化界面,Service 都是从其它程序组件中启动、停止和控制,这些组件包括其它的 Service、Activity 和 Broadcast Receiver。如果你的应用程序正常且不间断的运行,而不直接依赖于用户输入,Service 是你最佳的选择。Service 生命周期 服务常用生命周期回调方法如下: onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或 bindService()方法,服务也只被创建一次。onDestroy()该方法在服务被终止时调用。 Service 对象不能自己启动,需要通过某个 Activity、Service 或者其他 Context 对象来启动。启动的方法有两种,Context.startService 和 Context.bindService()。两种方式的生命周期是不同的,具体如下所示。Context.startService 方式的生命周期: 启动时,startService onCreate() onStart() 停止时,stopService onDestroy() Context.bindService 方式的生命周期: 绑定时,bindService - onCreate() onBind() 解绑定时,unbindService onUnbind() onDestory() Service 实现 定义一个 Service 只需要如下两步: 第一步:继承 Service 类 public class SMSService extends Service 这里可以选择要实现的方法 第二步:在 AndroidManifest.xml 文件中的节点里对服务进行配置: 好了,废话少说,下面从我的代码直接开始:1.2. package com.lxx;3.4. import java.io.IOException;5. import java.io.InputStream;6. import java.io.OutputStream;7. import java.util.UUID;8. import android.app.Service;9. import android.bluetooth.BluetoothAdapter;10.import android.bluetooth.BluetoothDevice;11.import android.bluetooth.BluetoothSocket;12.import android.content.BroadcastReceiver;13.import android.content.Context;14.import android.content.Intent;15.import android.content.IntentFilter;16.import android.os.IBinder;17.import android.util.Log;18.19.public class MyService extends Service20.public boolean threadFlag = true;21.MyThread myThread;22. CommandReceiver cmdReceiver;/继承自 BroadcastReceiver对象,用于得到 Activity发送过来的命令23. /*service 命令*/ 24.static final int CMD_STOP_SERVICE = 0x01;25. static final int CMD_SEND_DATA = 0x02;26. static final int CMD_SYSTEM_EXIT =0x03;27. static final int CMD_SHOW_TOAST =0x04;28.29. private BluetoothAdapter mBluetoothAdapter = null;30. private BluetoothSocket btSocket = null;31. private OutputStream outStream = null;32. private InputStream inStream = null;33. public boolean bluetoothFlag = true;34. private static final UUID MY_UUID = UUID.fromString(00001101-0000-1000-8000-00805F9B34FB);35. private static String address = 00:19:5D:EE:9B:8F; / 0 174. msgBuffer2 = (byte)(value 8 175. msgBuffer3 = (byte)(value 16 177. 178. try 179. outStream.write(msgBuffer, 0, 5);180. outStream.flush();181. catch (IOException e) 182. e.printStackTrace();183. 184. 185.186. public int readByte()/return -1 if no data187. int ret = -1; 188. if(!bluetoothFlag)189. return ret;190. 191. try 192. ret = inStream.read();193. catch (IOException e) 194. e.printStackTrace();195. 196. return ret;197. 198.199. public void stopService()/停止服务 200. threadFlag = false;/停止线程201. stopSelf();/停止服务202. 203. 204. public void showToast(String str)/显示提示信息205. Intent intent = new Intent();206. intent.putExtra(cmd, CMD_SHOW_TOAST);207. intent.putExtra(str, str);208. intent.setAction(android.intent.action.lxx);209. sendBroadcast(intent); 210. 211.212. public void DisplayToast(String str)213. 214. Log.d(Season,str); 215. 216.217. /接收 Activity传送过来的命令218. private class CommandReceiver extends BroadcastReceiver219. Override220. public void onReceive(Context context, Intent intent) 221. if(intent.getAction().equals(android.intent.action.cmd)222. int cmd = intent.getIntExtra(cmd, -1);/获取 Extra信息 223. if(cmd = CMD_STOP_SERVICE)224. stopService();225. 226. 227. if(cmd = CMD_SEND_DATA)228. 229. byte command = intent.getByteExtra(command, (byte) 0);230. int value = intent.getIntExtra(value, 0);231. sendCmd(command,value);232. 233. 234. 235. 236. 237.238.复制代码主界面 Activity只有一个按钮,就是通过 Broadcast来想 Service发送数据,Service 收到数据进行命令等的解析,然后调用相应的函数,相当于直接调用了 Service中的函数.因为Activity和 Service是运行在不同的进程中的,两者不能进行直接的通讯,必须通过一个桥梁建立起联系才行. 1.2. package com.lxx;3. import android.app.Activity;4. import android.content.BroadcastReceiver;5. import android.content.Context;6. import android.content.Intent;7. import android.content.IntentFilter;8. import android.os.Bundle;9. import android.os.IBinder;10.import android.view.View;11.import android.view.View.OnClickListener;12.import android.widget.Button;13.import andr
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号