我发现命令从我的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设备发送命令到蓝牙相关推荐

  1. android ble 实现自动连接,Android:自动重新连接BLE设备

    经过多次试验和磨难之后,这就是我最好让Android自动连接的唯一用户操作是首先选择设备(如果使用设置菜单然后首先配对). 您必须将配对事件捕获到BroadcastReceiver中并执行Blueto ...

  2. Android蓝牙4.0开发及发送指令到蓝牙硬件设备,简单好用,方法已写好直接可用

    近日,接到需要用到蓝牙解锁硬件设备的新需求,开发过程中呢也遇到许多硬件的坑,开发协议文档较简单,几句话就完了,第一次搞得我自己一脸懵逼,本来一两个小时就能写完并测试完成的过程用了两三天.哎!默默地回到 ...

  3. Android BLE学习(一): Android搜索BLE设备

    http://my.csdn.net/lidec 背景 总结一下最近ble的学习情况.自从入手ble 51822开发板后就开始不停加班,中途出于好奇,业余时间写了一些单片机上json解析相关的东西,妄 ...

  4. Android BLE设备蓝牙通信框架BluetoothKit

    BluetoothKit是一款功能强大的Android蓝牙通信框架,支持低功耗蓝牙设备的连接通信.蓝牙广播扫描及Beacon解析. 关于该项目的详细文档请关注:https://github.com/d ...

  5. Android BLE低功耗蓝牙开发(下) BLE客户端(中央设备)与GATT服务的通讯

    之前的文章简单实现了使用传统蓝牙进行通讯的DEMO,说是最简单其实只是夸张的写法~毕竟标题党横行,我们也得学学点~至少没有UC震惊部那么夸张. 然后,本来是要写Android开发之BlueTooth- ...

  6. Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为7870字,预计阅读12分钟 前言 接<Android BlueToothBLE入门(一)--低功耗蓝牙介绍>上篇, ...

  7. Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据

    Android系统似乎已经成为世界各地病毒作者的首选目标,每天都有新的恶意软件在感染更多的设备. 这一次,安全公司趋势科技发布警告,他们发现了一个新的Android后门--GhostCtrl Ghos ...

  8. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android

    LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...

  9. softAP配网:用Android手机为linux无屏设备输入wifi密码

    softAP配网,即利用设备的无线芯片,将设备进入到softAP模式,开启一个无线局域网,手机(或其它移动设备)通过连入设备开启的无线局域网后,向设备发送路由器的ssid及password等信息,让设 ...

最新文章

  1. Ajax+SpringBoot+Thymeleaf使用中遇到的跳转页面问题
  2. 「创式纪」人工智能应用创新大赛启动,首次结合商业计划和机器学习
  3. 第三话 开关说它不认识“2”
  4. SQLSERVER2005安装说明
  5. 多级队列调度算法可视化界面_冷月手撕408之操作系统(8)-处理机调度
  6. java和网易我的世界有什么区别_网易我的世界手机版对比正版JAVA版我的世界有什么区别?...
  7. mysql --max_allowed_packet=32m_mysql 设置max_allowed_packet 大小的办法
  8. 阿里云块存储、对象存储(OSS)、文件存储(NAS)的区别?
  9. 小目标Trick | Detectron2、MMDetection、YOLOv5都通用的小目标检测解决方案
  10. PHP中文手册官方下载地址
  11. 昂达平板不能开机刷机_昂达平板电脑怎么刷机?昂达平板电脑刷机教程
  12. sqli-labs48关_Open Labs带来48小时骇客马拉松
  13. Java 快乐练习口算
  14. 特斯拉设计师评苹果造车:痴人说梦,缺乏创新
  15. 计算机网络修复提示DNS服务器,dns的服务器故障怎么办,电脑dns异常修复了没用...
  16. 【文献翻译】基于SCAP的配置分析用于全面的合规性检查
  17. ipv4与ipv6的联系与区别
  18. OpenBLT的介绍、应用场景及开源许可
  19. 网络安全评估职业技能师资培训
  20. ema matlab实现,用vba实现EMA函数

热门文章

  1. 如何恢复电脑系统桌面
  2. 基于Web的质量和测试度量指标
  3. 纠结的velocity log那些事(出现Permission denied)
  4. Axure 安装使用说明
  5. 终于搞明白gluPerspective和gluLookAt的关系了
  6. 第七讲 SCCM2012部署Endpoint Protect
  7. 在VS2010下运行Qt程序
  8. 语言特性与API设计
  9. RecSys 2017总结
  10. Android组件之Service