android ble从设备,从Android设备发送命令到蓝牙
我发现命令从我的Android设备发送到蓝牙设备。
蓝牙与微控制器相关联。我的努力如下:
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_ENABLE_BT = 2;
private BluetoothAdapter mBluetoothAdapter;
public static final String TAG = "CustomPOC BLEEEEEEE";
private Button btn_send;
private BluetoothDevice mdevice;
private Handler mHandler;
private ConnectThread mConnectThread;
private ConnectedThread mConnectedThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
btn_send = (Button)findViewById(R.id.senddata);
if (mBluetoothAdapter == null) {
Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
finish();
return;
}
if (!mBluetoothAdapter.isEnabled()) {
Log.i(TAG, "onClick - BT not enabled yet");
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
}
pairedOrNot();
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mConnectThread = new ConnectThread(mdevice);
mConnectThread.start();
// new ConnectAsynk(mdevice).execute();
}
});
}
private void pairedOrNot() {
Set pairedDevices = mBluetoothAdapter.getBondedDevices();
List s = new ArrayList();
for(BluetoothDevice bt : pairedDevices) {
s.add(bt.getAddress());
s.add(bt.getName());
if("08:7C:BE:00:00:01".equals(bt.getAddress())) {
mdevice = bt;
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_ENABLE_BT:
// When the request to enable Bluetooth returns
if (resultCode == Activity.RESULT_OK) {
Toast.makeText(this, "Bluetooth has turned on ", Toast.LENGTH_SHORT).show();
} else {
// User did not enable Bluetooth or an error occurred
Log.d(TAG, "BT not enabled");
Toast.makeText(this, "Problem in BT Turning ON ", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
Log.e(TAG, "wrong request code");
break;
}
}
private class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
public ConnectThread(BluetoothDevice device) {
BluetoothSocket tmp = null;
mmDevice = device;
try {
tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
/*Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);*/
System.out.println("BTTTTTTTTTTT Address "+mmDevice.getAddress());
BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(mmDevice.getAddress());
// Method m;
// m = hxm.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
// tmp = (BluetoothSocket)m.invoke(hxm, Integer.valueOf(1));
}
catch (Exception e){
e.printStackTrace();
}
mmSocket = tmp;
}
public void run() {
mBluetoothAdapter.cancelDiscovery();
try {
mmSocket.connect();
// Reset the ConnectThread because we're done
synchronized (MainActivity.this) {
mConnectThread = null;
}
// Cancel the thread that completed the connection
if (mConnectThread != null) {
mConnectThread.cancel();
mConnectThread = null;
}
// Cancel any thread currently running a connection
if (mConnectedThread != null) {
mConnectedThread.cancel();
mConnectedThread = null;
}
ConnectedThread mConnectedThread = new ConnectedThread(mmSocket);
mConnectedThread.start();
} catch (IOException connectException) {
try {
connectException.printStackTrace();
mmSocket.close();
} catch (IOException closeException) { }
} catch (Exception ex){
ex.printStackTrace();
}
}
public void cancel(){
try {
mmSocket.close();
} catch (IOException e) { e.printStackTrace();}
}
}
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { e.printStackTrace();}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
byte[] buffer = new byte[1024];
int begin = 0;
int bytes = 0;
while (true) {
try {
bytes += mmInStream.read(buffer, bytes, buffer.length - bytes);
for(int i = begin; i < bytes; i++) {
if(buffer[i] == "1010101100000001000000100000000100001110".getBytes()[0]) {
mHandler.obtainMessage(1, begin, i, buffer).sendToTarget();
begin = i + 1;
if(i == bytes - 1) {
bytes = 0;
begin = 0;
}
}
}
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public void write(byte[] bytes) {
try {
mmOutStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
public void cancel() {
try {
mmSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
当我检查连接状态时,几个单挑
tmp.isConnected()
我发现它正在返回
false
值。
我要将此命令(1010101100000001000000010000000100001110)发送到外部蓝牙。但我正在收到问题。日志跟踪在下面的应用程序启动时间:
08-17 07:48:39.718: W/art(14551): Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.
drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList,
android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
当点击按钮btn_send,然后我在日志追踪中得到以下消息:
08-17 07:51:32.046: W/BluetoothAdapter(14984): getBluetoothService() called with no BluetoothManagerCallback
08-17 07:51:38.448: W/System.err(14984): java.io.IOException: read failed, socket might closed or timeout, read ret: -1
08-17 07:51:38.449: W/System.err(14984): at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:573)
08-17 07:51:38.449: W/System.err(14984): at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:584)
08-17 07:51:38.449: W/System.err(14984): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:321)
08-17 07:51:38.449: W/System.err(14984): at com.mahmad.custompoc11aug.MainActivity$ConnectThread.run(MainActivity.java:164)
在调试之后,我观察到这个问题在这一行
mmSocket.connect();
所有必需的权限都在清单文件中给出。请帮我解决这个问题。提前致谢。
android ble从设备,从Android设备发送命令到蓝牙相关推荐
- android ble 实现自动连接,Android:自动重新连接BLE设备
经过多次试验和磨难之后,这就是我最好让Android自动连接的唯一用户操作是首先选择设备(如果使用设置菜单然后首先配对). 您必须将配对事件捕获到BroadcastReceiver中并执行Blueto ...
- Android蓝牙4.0开发及发送指令到蓝牙硬件设备,简单好用,方法已写好直接可用
近日,接到需要用到蓝牙解锁硬件设备的新需求,开发过程中呢也遇到许多硬件的坑,开发协议文档较简单,几句话就完了,第一次搞得我自己一脸懵逼,本来一两个小时就能写完并测试完成的过程用了两三天.哎!默默地回到 ...
- Android BLE学习(一): Android搜索BLE设备
http://my.csdn.net/lidec 背景 总结一下最近ble的学习情况.自从入手ble 51822开发板后就开始不停加班,中途出于好奇,业余时间写了一些单片机上json解析相关的东西,妄 ...
- Android BLE设备蓝牙通信框架BluetoothKit
BluetoothKit是一款功能强大的Android蓝牙通信框架,支持低功耗蓝牙设备的连接通信.蓝牙广播扫描及Beacon解析. 关于该项目的详细文档请关注:https://github.com/d ...
- Android BLE低功耗蓝牙开发(下) BLE客户端(中央设备)与GATT服务的通讯
之前的文章简单实现了使用传统蓝牙进行通讯的DEMO,说是最简单其实只是夸张的写法~毕竟标题党横行,我们也得学学点~至少没有UC震惊部那么夸张. 然后,本来是要写Android开发之BlueTooth- ...
- Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为7870字,预计阅读12分钟 前言 接<Android BlueToothBLE入门(一)--低功耗蓝牙介绍>上篇, ...
- Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
Android系统似乎已经成为世界各地病毒作者的首选目标,每天都有新的恶意软件在感染更多的设备. 这一次,安全公司趋势科技发布警告,他们发现了一个新的Android后门--GhostCtrl Ghos ...
- LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...
- softAP配网:用Android手机为linux无屏设备输入wifi密码
softAP配网,即利用设备的无线芯片,将设备进入到softAP模式,开启一个无线局域网,手机(或其它移动设备)通过连入设备开启的无线局域网后,向设备发送路由器的ssid及password等信息,让设 ...
最新文章
- Ajax+SpringBoot+Thymeleaf使用中遇到的跳转页面问题
- 「创式纪」人工智能应用创新大赛启动,首次结合商业计划和机器学习
- 第三话 开关说它不认识“2”
- SQLSERVER2005安装说明
- 多级队列调度算法可视化界面_冷月手撕408之操作系统(8)-处理机调度
- java和网易我的世界有什么区别_网易我的世界手机版对比正版JAVA版我的世界有什么区别?...
- mysql --max_allowed_packet=32m_mysql 设置max_allowed_packet 大小的办法
- 阿里云块存储、对象存储(OSS)、文件存储(NAS)的区别?
- 小目标Trick | Detectron2、MMDetection、YOLOv5都通用的小目标检测解决方案
- PHP中文手册官方下载地址
- 昂达平板不能开机刷机_昂达平板电脑怎么刷机?昂达平板电脑刷机教程
- sqli-labs48关_Open Labs带来48小时骇客马拉松
- Java 快乐练习口算
- 特斯拉设计师评苹果造车:痴人说梦,缺乏创新
- 计算机网络修复提示DNS服务器,dns的服务器故障怎么办,电脑dns异常修复了没用...
- 【文献翻译】基于SCAP的配置分析用于全面的合规性检查
- ipv4与ipv6的联系与区别
- OpenBLT的介绍、应用场景及开源许可
- 网络安全评估职业技能师资培训
- ema matlab实现,用vba实现EMA函数