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

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. Android手游2048核心功能

    private void swipeUp(){ //向上滑动函数 for (int x = 0; x < 4; x++) { //行从上到下 for (int y = 0; y < 4; ...

  2. AES对称加解密

    简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher fee ...

  3. Mac下包管理平台homebrew的使用

    一.安装 参考:http://www.cnblogs.com/EasonJim/p/6287098.html 二.使用 假设我要安装node,命令如下: 安装软件 brew install node ...

  4. Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)

    前言 應用程式發展的腳步, 從來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年相當盛行的行動裝置應用程式(Mobile Application), 身為C# ...

  5. MD5 工具类

    package com.payease.chains.risk.utils; /** * md5密码加密工具类 * Created by liuxiaoming on 2017/8/28. */ pu ...

  6. oauth2.0的授权流程详解

    授权模式 1)oauth2.0 提供了四种授权模式,开发者可以根据自己的业务情况自由选择. 授权码授权模式(Authorization Code Grant) 隐式授权模式(简化模式)(Implici ...

  7. 第2章—装配Bean—通过java代码装配bean

    通过java代码装配bean ​ 在进行显式装配的时候,有两种选型方案:java和XML配置,这里先介绍java的配置方式. 2.3.1创建配置类 先复习下上一章的配置内容: @Configurati ...

  8. canvas猜数游戏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Java Servelet

    1.服务器端运行的程序 2.Servelet三个方法 init service 抽象方法 destory 这三个方法构成了servelet的生命周期 3.步骤 1.在web.xml中 描述了servl ...

  10. HDOJ 5019 Revenge of GCD

    Revenge of GCD In mathematics, the greatest common divisor (gcd), also known as the greatest common ...