zoukankan      html  css  js  c++  java
  • Android 蓝牙开发

    今天给大家带来蓝牙开发的基础,主要展示的是程序搜到蓝牙会通过list展示出来,并实时排序,远近与信号强弱


    首先我们要有次jar包



    我们先推断手机是否能支持蓝牙功能


    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
       Toast.makeText(this, "蓝牙不支持", Toast.LENGTH_SHORT).show();
    }
    
    


    然后我们看看蓝牙是否打开


    if (!ylwlmanager.isBluetoothEnabled()) {
       Toast.makeText(this, "蓝牙没有打开", Toast.LENGTH_SHORT).show();
    }

    把list  适配器全初始化一下


    private void UIinit() {
    final YlwlManager ylwlmanager = YlwlManager.getInstance(mcontext);
    newDevicesListView = (ListView) findViewById(R.id.new_devices); deviceAdapter = new DeviceAdapter(this, deviceList); newDevicesListView.setAdapter(deviceAdapter);
      //把蓝牙接收打开  这里能够用个button控制  作者直接就打开了
       ylwlmanager.scanLeDevice(true);
       ylwlmanager.setYlwlManagerListener(lis);
    }

    蓝牙监听

    YlwlManagerListener lis = new YlwlManagerListener() {
       @Override
       public void onUpdateBeacon(final ArrayList<BluetoothDeviceAndRssi> beacons) {
          /**
           * 传多个beacon过来 已经做好了排序 , 距离 连接状态(BluetoothDeviceAndRssi isConn方法)
           * 也随时改变
           */
          runOnUiThread(new Runnable() {
             @Override
             public void run() {
                deviceList = beacons;
    
                Collections.sort(deviceList);// 距离排序
                deviceAdapter = new DeviceAdapter(DeviceListActivity.this, deviceList);
                newDevicesListView.setAdapter(deviceAdapter);
             }
          });
       }
    
       @Override
       public void onNewBeacon(BluetoothDeviceAndRssi beacon) {
          /**
           * 传单个beacon过来
           */
       }
    
       @Override
       public void onNewBeaconDataChang(BluetoothDeviceAndRssi beacon) {
          /**
           * 传单个beacon过来 并且是mac地址不变 距离变 连接状态变
           */
       }
    };


    以下是适配器代码


    public class DeviceAdapter   extends BaseAdapter {
          Context context;
          List<BluetoothDeviceAndRssi> devices;
          LayoutInflater inflater;
    
          public DeviceAdapter(Context context,
                List<BluetoothDeviceAndRssi> devices) {
             this.context = context;
             inflater = LayoutInflater.from(context);
             this.devices = devices;
          }
    
          @Override
          public int getCount() {
             return devices.size();
          }
    
          @Override
          public Object getItem(int position) {
             return devices.get(position);
          }
    
          @Override
          public long getItemId(int position) {
             return position;
          }
    
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
             ViewGroup vg = null;
             if (convertView != null) {
                vg = (ViewGroup) convertView;
             } else {
                vg = (ViewGroup) inflater
                      .inflate(R.layout.device_item, null);
             }
    
             BluetoothDeviceAndRssi bluetoothdeviceandrssi = devices
                   .get(position);
             TextView tvadd = ((TextView) vg.findViewById(R.id.address));
             TextView tvname = ((TextView) vg.findViewById(R.id.name));
             ImageView image_rssi = (ImageView) vg.findViewById(R.id.image_rssi);
    
             byte rssival = (byte) bluetoothdeviceandrssi.getRssi();
             if (rssival > (-60)) {
                image_rssi.setImageResource(R.drawable.icon_rssi6);
             } else if (rssival > (-75)) {
                image_rssi.setImageResource(R.drawable.icon_rssi5);
             } else if (rssival > (-90)) {
                image_rssi.setImageResource(R.drawable.icon_rssi4);
             } else if (rssival > (-100)) {
                image_rssi.setImageResource(R.drawable.icon_rssi3);
             } else if (rssival > (-110)) {
                image_rssi.setImageResource(R.drawable.icon_rssi2);
             } else {
                image_rssi.setImageResource(R.drawable.icon_rssi1);
             }
    
             if (bluetoothdeviceandrssi.getBluetoothdevice().getName() == null) {
                tvname.setText("Unknow Name");
             } else {
                tvname.setText(bluetoothdeviceandrssi.getBluetoothdevice()
                      .getName());
             }
             tvadd.setText("mac地址"+ bluetoothdeviceandrssi.getBluetoothdevice().getAddress());
             return vg;
          }
       
    }
    


    图片是这个样子




    最后重要的是
    AndroidManifest.xml


    我们先推断手机是否能支持蓝牙功能


    <service
        android:name="com.yunliwuli.beacon.kit.service.UartService"
        android:enabled="true" />


    权限


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    over

    须要jar包请私密

    作者水平有限。不喜勿喷




    我们先推断手机是否能支持蓝牙功能
  • 相关阅读:
    Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
    别把项目成功当目标!——项目经理的误区(1)(转)
    技术,项目经理的命?——项目经理的误区(3)(转)
    项目管理中,最难管的是什么?(转)
    项目经理的超越(三)人际优先,做事上的超越(转)
    大丈夫不可一日无权啊!——项目经理的误区(2)(转)
    舌尖上的职场(二)一起去吃饭吧!(转)
    舌尖上的职场(一)你最近还好吗?(转)
    【项目经理之修炼(10)】《初级篇》人际关系问题也是可以避免的(转)
    gcc与g++区别
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7401137.html
Copyright © 2011-2022 走看看