- 浏览: 518078 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangyunliang:
大哥你太历害了谢谢
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
u013015029:
LZ,请问下,在// 添加消息到聊天窗口 , 这里获取Ed ...
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
endual:
怎么保持会话,我搞不懂啊
Android基于XMPP Smack Openfire开发IM【一】登录openfire服务器 -
donala_zq:
显示:[2013-11-30 11:50:36 - Andro ...
android-----------新浪微博 -
donala_zq:
哥,运行不了啊
android-----------新浪微博
工程结构图:
[img]
[/img]
MainActivity
BTConnectActivity
WriteActivity
记得添加权限:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
[img]
[/img]
MainActivity
package com.zzl.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(),BTConnectActivity.class); startActivity(intent); finish(); } }); } }
BTConnectActivity
package com.zzl.test; /*************************************************************/ /* Project Shmimn * Mobile Health-care Device * Yuhua Chen * 2011-4-24 16:35:21 */ /*************************************************************/ import java.io.IOException; import java.util.UUID; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.content.Context; import android.content.BroadcastReceiver; import android.content.IntentFilter; import android.widget.AdapterView; import android.widget.ListView; import android.widget.ArrayAdapter; import android.widget.Toast; import android.util.Log; import android.view.View; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; public class BTConnectActivity extends Activity { // private static final String TAG = "BTConnectActivity"; /** Called when the activity is first created. */ public static final int REQUEST_ENABLE_BT = 8807; public BroadcastReceiver mBTReceiver; public static BluetoothSocket mBTSocket; public BluetoothAdapter mBTAdapter; public BluetoothDevice mBTDevice; private ArrayAdapter<String> adtDvcs; private List<String> lstDvcsStr = new ArrayList<String>(); private ListView lvDevicesList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.btconnect); // 初始化 BluetoothAdapter mBTAdapter = BluetoothAdapter.getDefaultAdapter(); // c if (mBTAdapter == null) { Toast.makeText(BTConnectActivity.this, "没有支持蓝牙的设备! ", Toast.LENGTH_SHORT).show(); this.finish(); } if (!mBTAdapter.isEnabled()) { // Open a new dialog to ask user whether wanna open BT Toast.makeText(BTConnectActivity.this, "请打开手机蓝牙后再重试! ", Toast.LENGTH_SHORT).show(); this.finish(); Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enabler, REQUEST_ENABLE_BT); } // 开启 BroadCast Receiver mBTReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String act = intent.getAction(); // To see whether the action is that already found devices if (act.equals(BluetoothDevice.ACTION_FOUND)) { // 如果发现一个设备,得到设备的对象 BluetoothDevice tmpDvc = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // Put the name & address into a string String tmpDvcStr = tmpDvc.getName() + "|" + tmpDvc.getAddress(); if (lstDvcsStr.indexOf(tmpDvcStr) == -1) { // Avoid duplicate add devices lstDvcsStr.add(tmpDvcStr); adtDvcs.notifyDataSetChanged(); Toast.makeText(BTConnectActivity.this, "发现一个新设备", Toast.LENGTH_SHORT).show(); } } if (act.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) { Toast.makeText(BTConnectActivity.this, "搜索完成!", Toast.LENGTH_SHORT).show(); } if (act.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) { Toast.makeText(BTConnectActivity.this, "开始搜索设备", Toast.LENGTH_SHORT).show(); } } }; // 注册 broadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mBTReceiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED); registerReceiver(mBTReceiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mBTReceiver, filter); lvDevicesList = (ListView) findViewById(R.id.lvDevicesList); adtDvcs = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lstDvcsStr); lvDevicesList.setAdapter(adtDvcs); if (mBTAdapter.isDiscovering()) { Toast.makeText(BTConnectActivity.this, "正在搜索......", Toast.LENGTH_SHORT).show(); } else { lstDvcsStr.clear(); adtDvcs.notifyDataSetChanged(); mBTDevice = null; mBTAdapter.startDiscovery(); } // 在设备列表中创建单击事件 lvDevicesList .setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (mBTAdapter == null) Toast.makeText(BTConnectActivity.this, "没有搜索到蓝牙设备", Toast.LENGTH_SHORT).show(); else { // 停止搜索 mBTAdapter.cancelDiscovery(); // 得到设备的地址 String str = lstDvcsStr.get(arg2); String[] dvcValues = str.split("\\|"); String dvcAddr = dvcValues[1]; UUID dvcUUID = UUID .fromString("00001101-0000-1000-8000-00805F9B34FB"); mBTDevice = mBTAdapter.getRemoteDevice(dvcAddr); // 连接设备 try { // 根据UUID创建并返回一个BluetoothSocket mBTSocket = mBTDevice .createRfcommSocketToServiceRecord(dvcUUID); mBTSocket.connect(); Intent intent = new Intent(getApplicationContext(),WriteActivity.class); startActivity(intent); } catch (IOException e) { e.printStackTrace(); } } } }); } public void onActivityResult(int RequestCode, int ResultCode, Intent data) { Log.i("BTConnectActivity", "RequestCode is " + RequestCode + ", ResultCode is " + ResultCode); switch (RequestCode) { case REQUEST_ENABLE_BT: if (ResultCode == RESULT_OK) { Toast.makeText(this.getApplicationContext(), "蓝牙已连接!", Toast.LENGTH_SHORT).show(); } else if (ResultCode == RESULT_CANCELED) { Toast.makeText(this.getApplicationContext(), "蓝牙连接被取消!", Toast.LENGTH_SHORT).show(); } break; } } @Override protected void onDestroy() { try { mBTSocket.close(); } catch (IOException e) { e.printStackTrace(); } this.unregisterReceiver(mBTReceiver); super.onDestroy(); } }
WriteActivity
package com.zzl.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class WriteActivity extends Activity { private TextView tv; private BTReadThread mReadThread = new BTReadThread(50); private boolean enRead = false; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: tv.setText(msg.obj.toString()); break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.write); tv = (TextView) findViewById(R.id.tv); btint(); } /** * 开启读取蓝牙数据的线程 */ private void btint() { try { if (BTConnectActivity.mBTSocket.getInputStream() != null) { enRead = true; mReadThread.start(); } } catch (Exception e) { e.printStackTrace(); } } /*** * 蓝牙操作 */ class BTReadThread extends Thread { private int wait = 50;// Time to wait public BTReadThread(int wait) { this.wait = wait; } public void stopThread(){ enRead = false; } public void run() { while (enRead) { try { if (BTConnectActivity.mBTSocket.getInputStream() != null) { byte[] tmp = new byte[1024]; int len = BTConnectActivity.mBTSocket.getInputStream().read(tmp, 0, 1024); // 卡 if (len > 0) { String res = ""; for (int i = 0; i < tmp.length; i++) { String hex = Integer.toHexString(tmp[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } res += hex.toUpperCase(); } String strDES = res.substring(0, 16); Message message = handler.obtainMessage(); message.what = 0; message.obj = strDES; handler.sendMessage(message); } } Thread.sleep(wait); } catch (Exception e) { e.printStackTrace(); } } } } }
记得添加权限:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
发表评论
-
Android中如何模拟一次点击(touch)事件
2014-05-06 10:41 0在Android中有时需要模拟某一个View的touch事件, ... -
Android程序Crash时的异常上报
2014-04-28 18:15 0http://blog.csdn.net/singwhatiw ... -
android程序中证书签名校验的方法
2014-04-28 17:58 1906android程序中证书签名校验的方法一 2013-02 ... -
MD5理解错了,哎
2014-03-17 14:14 0MD5只对数据加密是无法解密的,也就是说,你把100加密后,就 ... -
Android 获取网络时间
2014-03-12 11:42 2013Android 获取网络时间 在网上看到的最常见的方式有: ... -
SQLite清空表并将自增列归零
2014-03-05 18:02 1471SQLite清空表并将自增列归零 作者:Zhu Yanfeng ... -
Handler小看一下
2013-11-11 16:42 0android handler调用post方法还是阻塞 su ... -
Frame Animation小看一下
2013-10-12 16:30 724Demo运行效果图: 源码: -
动画小学一下
2013-10-12 16:14 695转自: http://www.eoeandroid.com/f ... -
Android 动画之ScaleAnimation应用详解
2013-10-12 15:49 965===============eoeAndroid社区推荐:= ... -
android开发中的一个工具类
2013-06-19 16:04 0package com.wanpu.login.dialog; ... -
android TextView怎么设置个别字体颜色并换行?
2013-06-20 09:25 1637(1)、TextView 设置个别字体颜色 TextView ... -
Android开发之文件下载,状态时显示下载进度,点击自动安装
2013-05-07 15:38 1370在进行软件升级时,需要进行文件下载,在这里实现自定义的文件下载 ... -
android中的状态保存
2013-04-07 14:21 935package com.zzl.call; import ... -
android动画基础:tween动画
2013-04-06 11:21 1180工程结构图: [img] [/img] 四个动画的xml ... -
面试中遇到的几个问题
2013-06-09 11:56 945SAX与DOM之间的区别 SAX ( ... -
Android获取其他包的Context实例,然后调用它的方法,反射!!!
2013-03-25 10:32 1162Android中有Context的概念,想必大家都知道。Con ... -
Android的内存机制和常见泄漏情形
2013-03-06 16:55 756一、 Android的内存机制 Android的程序由Ja ... -
JUnit测试小小demo
2013-03-06 16:37 1089运行效果图: [img] [/img] 项目结构图 ... -
android开发中的异常小工具
2013-03-04 15:53 864package com.zzl.tools; impor ...
相关推荐
蓝牙使用说明,包括用户指南 蓝牙使用说明,包括用户指南
8830黑莓蓝牙使用教程,8830黑莓蓝牙使用教程8830黑莓蓝牙使用教程
ios 蓝牙使用 demo
我的练习,uniapp小程序蓝牙使用
Android通过蓝牙使用Pbap协议读取通讯录.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
对如何调用android系统的蓝牙并获取蓝牙MAC地址及蓝牙名称等信息给出了方法。
蓝牙热敏打印机所使用的蓝牙协议文档,SPP
蓝牙的简单使用,包括蓝牙的打开 关闭 蓝牙设备的浏览 连接的建立 发送命令等
附件中是通过蓝牙读取终端设备通讯录、通话记录等所需要的PBAP、Vcard、JavaOBEX源码文件,只需导入到相应的工程里即可使用。
蓝牙 开发中的常见问题的解决 适用于5.0 以上的各种Android 平台,UUID的使用,蓝牙的扫描。蓝牙的打开,蓝牙通信socket的建立与监听
蓝牙模块使用说明书,有较详细的使用操作方法,使用者可以自己定义选用口线
龙邱蓝牙配套资料
本应用参考google官方的蓝牙使用方法,实现了在安卓手机上,控制蓝牙的功能。 本程序实现了开关蓝牙设备,显示已配对的蓝牙设备,以及搜索附近的蓝牙设备等基本功能,并已做多语言适配工作,并可以参考添加其他语言...
hc-05蓝牙模块的使用教程,包括用户手册,串口使用说明,程序源码等
JDY-8(V3.3)蓝牙透传模块开发资料V3.3版功能使用手册测试工具等等等等等等
从晚上下载的例子,发现不能自动获取设备、服务和特征值,这就导致了程序通用性大大降低,在通过自己的摸索后,将这部分功能调试通过,现在已经是一个通用的webapp调用ble的程序了,功能包括搜索、连接蓝牙,选取...
第三步:设置实例监听然后为这个蓝牙管理器设置监听(OnSearchDeviceListener,OnConnectListener,OnSendMessageL
STM320F103蓝牙模块BC417例程(IAR软件)
乐果F5mini蓝牙音箱官方升级软件,需要配合相关固件同时使用,压缩文件内只包含升级软件,不含固件升级操作说明,不含固件文件
专门为蓝牙配对而制作的串口软件,极大的方便了编程人员