蓝牙连接电子称以及解析电子称返回的数据
2016-05-12 15:34
465 查看
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 net.intelink.express.SZYDPDA.R; import net.intelink.express.adapter.CommonAdapter; import net.intelink.express.adapter.ViewHolder; import android.app.ProgressDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnKeyListener; 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.KeyEvent; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class BlueToothActivity extends BaseActivity { BluetoothAdapter adapter; private TextView tv_count; InputStream inputStream = null; private boolean mIsRunning = false; private List<String> devices; private List<BluetoothDevice> deviceList; private final String lockName = "BOLUTEK"; private ListView list; private ProgressDialog dialog = null; private ProgressDialog isingDialog=null; private boolean isConnected = false; private CommonAdapter<String> commonAdapter; private StringBuffer sBuffer=new StringBuffer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blue_tooth); list = (ListView) findViewById(R.id.list); tv_count = (TextView) findViewById(R.id.tv_count); devices = new ArrayList<String>(); deviceList = new ArrayList<BluetoothDevice>(); search(); } private void search() { adapter = BluetoothAdapter.getDefaultAdapter(); if (!adapter.isEnabled()) { adapter.enable(); } // Intent enable = new // Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); // enable.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 3600); // startActivity(enable); // IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); // registerReceiver(receiver, filter); 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(); dialog = ProgressDialog.show(this, "", "正在搜索"); dialog.setCancelable(false); dialog.setOnKeyListener(onKeyListener); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { BluetoothDevice device = deviceList.get(position); connect(device); } }); commonAdapter=new CommonAdapter<String>(this, devices, R.layout.activity_blue_tooth_item) { @Override public void convert(ViewHolder holder, String item) { holder.setText(R.id.tv_address, item); } }; list.setAdapter(commonAdapter); bluetoothSocket=mApplication.getSocket(); if(bluetoothSocket!=null){ mysocket(); } } private void mysocket() { new Thread(new Runnable() { @Override public void run() { try { if (bluetoothSocket != null) { inputStream = bluetoothSocket.getInputStream(); mIsRunning = true; } while (mIsRunning) { byte[] buffer = new byte[16]; if (inputStream != null && inputStream.read(buffer) > 0 && mIsRunning) { Message msg = mHandler.obtainMessage(); msg.what = 1; msg.obj = new String(buffer); mHandler.sendMessage(msg); Log.i("OIJOI", new String(buffer)); Arrays.fill(buffer, (byte) 0); } } } catch (IOException e) { e.printStackTrace(); } } }).start(); } private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // 搜索设备时,取得设备的MAC地址 if (BluetoothDevice.ACTION_FOUND.equals(action)) { final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (isLock(device)) { commonAdapter.add(device.getName()); deviceList.add(device); } } showDevices(); } }; private void showDevices() { if(devices!=null && devices.size()>0){ commonAdapter.notifyDataSetChanged(); } } private void connect(final BluetoothDevice device) { isingDialog=ProgressDialog.show(this, "", "连接中"); isingDialog.setCancelable(false); isingDialog.setOnKeyListener(onKeyListener); new Thread(new Runnable() { @Override public void run() { try { UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid); new Thread(new Runnable() { @Override public void run() { try { if (bluetoothSocket != null) { if (bluetoothSocket.isConnected()) { Message msg = mHandler.obtainMessage(); msg.what = 3; mHandler.sendMessage(msg); } else { bluetoothSocket.connect(); isConnected = true; mApplication.setSocket(bluetoothSocket);//保存 if (bluetoothSocket != null) { inputStream = bluetoothSocket.getInputStream(); mIsRunning = true; } while (mIsRunning) { byte[] buffer = new byte[16]; if (inputStream != null && inputStream.read(buffer) > 0 && mIsRunning) { Message msg = mHandler.obtainMessage(); msg.what = 1; msg.obj = new String(buffer); mHandler.sendMessage(msg); Log.i("OIJOI", new String(buffer)); Arrays.fill(buffer, (byte) 0); } } } } } catch (Exception e) { e.printStackTrace(); isConnected = false; Message msg = mHandler.obtainMessage(); msg.what = 2; mHandler.sendMessage(msg); } } }).start(); } catch (Exception e) { e.printStackTrace(); } } }).start(); } private boolean isLock(BluetoothDevice device) { // boolean isLockName=(device.getName()).equals(lockName); boolean isSingleDevice = devices.indexOf(device.getName()) == -1; // return isLockName && isSingleDevice; return isSingleDevice; } Handler mHandler = new Handler() { public void handleMessage(Message msg) { if(isingDialog!=null){ isingDialog.dismiss(); isingDialog=null; } switch (msg.what) { case 1: String result = String.valueOf(msg.obj).trim().replace("\n", ""); if (result != null && !"".equals(result)) { sBuffer.append(result); String myResult=sBuffer.toString(); System.out.println(myResult); if(myResult.contains("wn") && myResult.contains("kg")){ if (myResult.indexOf("wn") < myResult.lastIndexOf("kg")) { if(myResult.contains("kgwn")){ tv_count.setText(myResult.substring(0,myResult.indexOf("kgwn"))); Log.i("www", myResult.substring(0,myResult.indexOf("kgwn"))); }else { tv_count.setText(myResult.substring(myResult.indexOf("wn") + 2, myResult.lastIndexOf("kg"))); Log.i("www",myResult.substring(myResult.indexOf("wn") + 2, myResult.lastIndexOf("kg"))); } } } sBuffer.delete(0, myResult.lastIndexOf("kg")+2); Log.i("qqq", new String(sBuffer.toString())); } break; case 2: if (isConnected == false) { Toast.makeText(BlueToothActivity.this, "蓝牙连接失败.", Toast.LENGTH_SHORT).show(); } break; case 3: Toast.makeText(BlueToothActivity.this, "蓝牙已连接.", Toast.LENGTH_SHORT).show(); break; default: break; } }; }; protected void onDestroy() { unregisterReceiver(receiver); super.onDestroy(); }; private OnKeyListener onKeyListener = new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (dialog != null) { dialog.dismiss(); } if(isingDialog!=null){ isingDialog.dismiss(); } if (adapter.isDiscovering()) { adapter.cancelDiscovery(); } } return false; } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case F5: if(!adapter.isDiscovering()){ adapter.startDiscovery(); dialog = ProgressDialog.show(this, "", "正在搜索"); dialog.setCancelable(false); dialog.setOnKeyListener(onKeyListener); } break; } return super.onKeyDown(keyCode, event); } }
相关文章推荐
- 保存两位数小数java float类型
- ScrollView 嵌套 ListView 时,刷新页面时,会出现 自动 滚动至listview 的区域 解决方案:
- SVG
- 第二十章 排查和调试Web程序 之 设计异常处理策略
- Android 属性动画 详解
- iOS启动页动画效果
- 转发和重定向的区别
- 【转载】postgreSQL在linux中安装详解
- Android基础--登陆界面,密码的隐藏和显示
- Visio保存为透明的图片
- java图形-趣味编程之奥运五环;
- poi2012 切题记
- 如何更改textField的placeholder的左边距以及颜色字号等
- Dr.Elephant FAQ 常见问题
- 【多线程-创建新线程】
- Android 中ListView 嵌套 ListView
- Sql日期时间格式转换
- MVC中form提交和在控制器中怎样接受
- 个性化推荐漫谈
- 01.安装maven