蓝牙一直是我内心屏蔽的一个模块哈哈哈哈!然而今天我不得不正视它了,我百度了看了好多因为需要设备匹配所以设备不在没办法测试,几天之后设备到了。因为没有接触过,看到返回的打印出来的菱形方块就以为是错了。于是一直在找解决的办法,然而也看不出有什么错误。结果其实是正确的┭┮﹏┭┮,下面贴一下我的代码:

package com.schw.ui.recyle;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

import com.schw.R;
import com.schw.ui.base.activity.BaseActivity;
import com.schw.util.SharePreferUtil;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainBlothActivity extends BaseActivity  {
    private ListView blothList;
    private List<BluetoothDevice> devices=new ArrayList<BluetoothDevice>();
 private BluetoothAdapter adapter;
 private DeviceListAdapter dListAdapter;
 private BluetoothSocket bSocket;
 private boolean mIsRuning=false;
 private boolean isConnected=false;
 private InputStream inputStream;
 private StringBuffer sBuffer=new StringBuffer();
 public static final UUID uuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
 
private Handler handler=new Handler(new Handler.Callback() {
  
  @Override
  public boolean handleMessage(Message msg) {
   // TODO Auto-generated method stub
   switch (msg.what) {
   case 1:
     Log.i("成功", "蓝牙已链接");
     mIsRuning=false;
     hindProgress();
     String string = (String) msg.obj;
        Log.i("Handler",string);
        Intent intent=new Intent();
     intent.putExtra("dataW", string);
     setResult(RESULT_OK, intent);
     finish();
    break;
   case 2:
    if(isConnected==false){
     Toast.makeText(getApplicationContext(), "蓝牙链接失败!",Toast.LENGTH_SHORT).show();
     hindProgress();
//     search();
    }
    break;
   case 3:
    Toast.makeText(getApplicationContext(), "蓝牙已链接!",Toast.LENGTH_SHORT).show();
    break;

default:
    break;
   }
   return false;
  }
 });
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
//  setContentView(R.layout.activity_main_bloth);
  blothList = (ListView) findViewById(R.id.blothList);
  mActionbar.setActionBarTitle("蓝牙列表");
  search();
}
 private void search() {
  // TODO Auto-generated method stub
  adapter = BluetoothAdapter.getDefaultAdapter();
  if(!adapter.isEnabled()){
   adapter.enable();
  }
  IntentFilter intentFilter =new IntentFilter();
  intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
  intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
  intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
  intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
  registerReceiver(receiver,intentFilter);
  
  adapter.startDiscovery();
  blothList.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view,
     int position, long id) {
    // TODO Auto-generated method stub
    initProgress("加载中……");
    BluetoothDevice device = devices.get(position);
    SharePreferUtil.saveDeviceAddress(getApplicationContext(), device.getAddress());
//    SharePreferUtil.saveDeviceAddress(getApplicationContext(), device.getName());
    connect(device);
   }
  });
  dListAdapter=new DeviceListAdapter();
  blothList.setAdapter(dListAdapter);
  if(bSocket!=null){
   myScket();
  }
 }
 private void myScket() {
  // TODO Auto-generated method stub
  new Thread(new Runnable() {
   @Override
   public void run() {
    // TODO Auto-generated method stub
    if(bSocket!=null){
     try {
      inputStream = bSocket.getInputStream();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     mIsRuning=true;
    }
    while(mIsRuning){
     byte[] buffer=new byte[16];
     try {
      if(inputStream!=null&&inputStream.read(buffer)>0&&mIsRuning){
       String string = new String(buffer);
       Log.i("MessageFill", string);
       Log.i("LastString", string.substring(0, 6));
//       Message msg=new Message();
//       msg.what=1;
//       msg.obj=string;
//       handler.sendMessage(msg);
//       break;
       Log.i("TAG", string.substring(0,1));
       if(!string.equals("")&&string.substring(0,1).equals("=")){
        Intent intent=new Intent();
        intent.putExtra("dataW", string);
        setResult(RESULT_OK, intent);
        finish();
        break;
       }else{
        Log.i("MessageFillelse==", string);
//        Intent intent=new Intent();
//        intent.putExtra("dataW", "false???");
//        setResult(RESULT_OK, intent);
//        finish();
       }
       }
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
    
   }
  }).start();
 }

private BroadcastReceiver receiver=new BroadcastReceiver() {

@Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  String action = intent.getAction();
  if(BluetoothDevice.ACTION_FOUND.equals(action)){
   BluetoothDevice parcelableExtra = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
   if(isLock(parcelableExtra)){
    dListAdapter.addDevice(parcelableExtra);
    devices.add(parcelableExtra);
   }
  }
  showDevices();
 }
};

private void showDevices() {
 // TODO Auto-generated method stub
 if(devices!=null&&devices.size()>0){
  dListAdapter.notifyDataSetChanged();
 }
}
private void connect(final BluetoothDevice device) {
 // TODO Auto-generated method stub
 new Thread(new Runnable() {
  @Override
  public void run() {
   // TODO Auto-generated method stub
   try {
    bSocket=device.createRfcommSocketToServiceRecord(uuid);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   new Thread(new Runnable() {
    @Override
    public void run() {
//     // TODO Auto-generated method stub
     try {
      if(bSocket!=null){
       if(bSocket.isConnected()){
        Message msg=new Message();
        msg.what=3;
        handler.sendMessage(msg);
       }else{
        try {
         bSocket.connect();
        } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
        isConnected=true;
        if(bSocket!=null){
         try {
          inputStream = bSocket.getInputStream();
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
         mIsRuning=true;
        }
        while(mIsRuning){
         Log.i("RUNG????????", mIsRuning+"");
         byte[] buffer=new byte[16];
         try {
          if(inputStream!=null&&inputStream.read(buffer)>0&&mIsRuning){
           String string = new String(buffer);
           Log.i("MessageFill", string);
           Log.i("LastString", string.substring(0, 6));
//          Message msg=new Message();
//          msg.what=1;
//          msg.obj=string;
//          mHandler.sendMessage(msg);
//          break;
           Log.i("TAG", string.substring(0,1));
           Log.i("TAG8", string.substring(8, 9));
           if(!string.equals("")&&string.substring(0,1).equals("=")&&(string.substring(8, 9)).equals("=")){
//           Intent intent=new Intent();
//           intent.putExtra("dataW", string);
//           setResult(RESULT_OK, intent);
//           finish();
//           String d=string.substring(2,3);
//           String c=string.substring(3,4);
//           String b=string.substring(4,5);
//           String a=string.substring(5,6);
//           Log.i("abcd",a+b+c+d);
//           String wb=a+b+c+d;
//           et_weight.setText(wb);
            Message msg=new Message();
            msg.what=1;
            msg.obj=string;
            handler.sendMessage(msg);
            hindProgress();
            
//           break;
           }else{
            Log.i("MessageFillelse==", string);
            hindProgress();
//           Intent intent=new Intent();
//           intent.putExtra("dataW", "false???");
//           setResult(RESULT_OK, intent);
//           finish();
//           isConnect=false;
             }
           }
//         }
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
        }
       }
      }
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      isConnected=false;
      Message msg=new Message();
      msg.what=2;
      handler.sendMessage(msg);
     }
    }
   }).start();
  }
 }).start();
 
}

private boolean isLock(BluetoothDevice device){
  boolean isSingleDevice = devices.indexOf(device.getName())==-1;
  return isSingleDevice;
}

//  Handler mHandler=new Handler(){
//  @SuppressWarnings("unused")
// public void handlerMessage(Message msg){
//   switch(msg.what){
//   case 1:
//    String valueOf = (String) msg.obj;
//    Log.i("称重=====",valueOf);
//    break;
//   case 3:
//    Log.i("成功", "蓝牙已链接");
//    break;
//   }
//  }
// };
 
 protected void onDestroy() {
  unregisterReceiver(receiver);
  super.onDestroy();
  try {
  bSocket.close();
  adapter.cancelDiscovery();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 
 };

class DeviceListAdapter extends BaseAdapter {

private List<BluetoothDevice> mBleArray;
  private ViewHolder viewHolder;

public DeviceListAdapter() {
   mBleArray = new ArrayList<BluetoothDevice>();
  }

public void addDevice(BluetoothDevice device) {
   if (!mBleArray.contains(device)) {
    mBleArray.add(device);
   }
  }

public void clear() {
   mBleArray.clear();
  }

@Override
  public int getCount() {
   return mBleArray.size();
  }

@Override
  public BluetoothDevice getItem(int position) {
   return mBleArray.get(position);
  }

@Override
  public long getItemId(int position) {
   return position;
  }

@Override
  public View getView(int position, View convertView, ViewGroup parent) {
   if (convertView == null) {
    convertView = LayoutInflater.from(MainBlothActivity.this).inflate(R.layout.listitem_device, null);
    viewHolder = new ViewHolder();
    viewHolder.tv_devName = (TextView) convertView.findViewById(R.id.device_name);
    viewHolder.tv_devAddress = (TextView) convertView.findViewById(R.id.device_address);
    convertView.setTag(viewHolder);
   } else {
    convertView.getTag();
   }

// add-Parameters
   BluetoothDevice device = mBleArray.get(position);
   String devName = device.getName();
   if (devName != null && devName.length() > 0) {
    viewHolder.tv_devName.setText(devName);
   } else {
    viewHolder.tv_devName.setText("unknow-device");
   }
   viewHolder.tv_devAddress.setText(device.getAddress());

return convertView;
  }

}

class ViewHolder {
  TextView tv_devName, tv_devAddress;
 }
 @Override
 protected void doSuccess(Message msg) {
  // TODO Auto-generated method stub
  
 }
 @Override
 protected void doError(Message msg) {
  // TODO Auto-generated method stub
  
 }
 @Override
 protected int getContentLayout() {
  // TODO Auto-generated method stub
  return R.layout.activity_main_bloth;
 }
}

但是,这里是又一个问题的,就我获取来的数据是倒过来的。而且是随机的不规则的所以我硬是生生的给正过来了。我知道肯定又简单的方法,但是我没有找到。也希望大家也能帮我看看。

Android链接蓝牙电子称的更多相关文章

  1. android 链接蓝牙不稳定的解决建议

    My workaround I scan BLE for a short period of time 3-4 seconds then I turn scan OFF for 3-4 seconds ...

  2. 锅巴视频工作室 ----------------android端蓝牙测试demo--app

    android端蓝牙测试demo--app 这个是为一个客户做蓝牙项目时的一个测试demo,用来测试蓝牙单片机的收发情况,代码中没有做一些兼容性测试,请理解 锅巴视频工作室,专注于android视频相 ...

  3. Android 串口蓝牙通信开发Java版本

    Android串口BLE蓝牙通信Java版 0. 导语 Qt on Android 蓝牙通信开发 我们都知道,在物联网中,BLE蓝牙是通信设备的关键设备.在传统的物联网应用中,无线WIFI.蓝牙和Zi ...

  4. ubuntu16.04连接android手机蓝牙共享网络热点

    最近的想要用android手机蓝牙共享wifi网络给ubuntu16.04系统用,查了好多资料,发现网上很少有有用的.自己实践后分享如下. 第一步:手机与电脑配对:         该步骤比较简单,网 ...

  5. Android BLE 蓝牙编程(一)

    最近在研究这个,等我有时间来写吧! 终于在端午节给自己放个假,现在就来说说关于android蓝牙ble的 最近的学习成果吧!! 需要材料(写个简单教程吧--关于小米手环的哦!嘿嘿) Android 手 ...

  6. 【转】Android bluetooth介绍(二): android blueZ蓝牙代码架构及其uart 到rfcomm流程

    原文网址:http://blog.sina.com.cn/s/blog_602c72c50102uzoj.html 关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP ...

  7. 【转】Android低功耗蓝牙应用开发获取的服务UUID

    原文网址:http://blog.csdn.net/zhangjs0322/article/details/39048939 Android低功耗蓝牙应用程序开始时获取到的蓝牙血压计所有服务的UUID ...

  8. Android ble 蓝牙4.0 总结

    本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API level < 18,也是用不了蓝牙4.0的哦 ...

  9. 【源代码】基于Android和蓝牙的单片机温度採集系统

    如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...

随机推荐

  1. spring boot快速入门 3: controller的使用

    模版引擎的使用: 第一步:在POM文件添加配置 <!-- 模版引擎 --> <dependency> <groupId>org.springframework.bo ...

  2. jQuery对象扩展方法(Extend)深度解析

    1.这几天在写自己的Js工具类库,所以在编写对象扩展方法,参考了jQuery的对象扩展方法,在编写该方法前,需要掌握js深拷贝和浅拷贝的相关知识,下面是jQuery3.2.1版本对象扩展方法的源码: ...

  3. html转图片,java库cssbox

    引入依赖包 <dependency> <groupId>net.sf.cssbox</groupId> <artifactId>cssbox</a ...

  4. apk反编译——基础是内功,得牢,飞跃还得多看源码,不同思想的碰撞才能产生火花,加油!!!!!!!!

    1.获取java源代码 1.1 dex2jar&jd-gui dex2jar:将apk反编译成class文件(classes.dex转化成jar文件) jd-gui:查看APK中classes ...

  5. GitBook入门(用github做出第一本书)——超详细配图说明

    我最近接触到gitbook,发现它支持markdown和git,刚好把我之前在github上的笔记可以生成一本书,于是我就开始着手捣鼓gitbook,一下午的时间就弄的差不多了,说明这个东西还是挺容易 ...

  6. Django与前端的交互

    在创建Django项目后,我们创建了一个App,我将这个App的名字命名为Cal,并在Cal这个文件夹下创建文件 templates. 创建templates文件夹以后,在项目settings.py文 ...

  7. memcached 学习笔记 3

    适合什么场合 memcached不是万能的,它也不是适用在所有场合. Memcached是“分布式”的内存对象缓存系统,那么就是说,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的 ...

  8. 了解SSL必须要懂得密码技术

    要理解SSL就必须理解密码系统.消息摘要函数(单向或散列函数)和数字签名,这些技术是许多文献所讨论的主题(比如[AC96),提供了保密性.完整性和认证的基础. 密码系统 假设Alice想给她的银行发一 ...

  9. 屏幕置顶(WindowManager服务)

    https://www.cnblogs.com/mythou/p/3244208.html

  10. HandlerInterceptor与MethodInterceptor

    HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行.实现一个HandlerInterceptor拦截器可以直接 ...