蓝牙设备

.蓝牙介绍:

是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换,我们主要掌握这几项技能:

  • 添加权限:
  •  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <!-- 用于访问GPS定位 -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH"/>
  • 打开蓝牙并设置允许被搜索
  • Intent intent = new Intent();
        intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);//开启蓝
        intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//允许蓝牙被搜索
       intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);//设置允许被搜索时间200s内可以被搜索到
        startActivityForResult(intent,100);
  • 关闭蓝牙
  • bluetoothAdapter.disable();
  • 搜索附近的蓝牙
  • bluetoothAdapter.startDiscovery();//搜索
  • 配对蓝牙:
  • bluetoothDevice.createBond();//发起配对
  • 配对蓝牙:
  • bluetoothDevice.createBond();
  • 获得已经配对的蓝牙设备:
  • adapter.getBondedDevices();
  •   private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
        Button bt_open,bt_close,bt_scan,bt_show;
        ListView listView,listView2;
        ArrayList<BluetoothDevice> list=new ArrayList<>();
        ArrayList<BluetoothDevice> list2=new ArrayList<>();
        MyAdapter myAdapter,myAdapter2;
        BluetoothAdapter adapter;
        BluetoothDevice device;
        BluetoothAdapter adapter1;
    
        String[] strings=new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION};
        MyRecevier myRecevier;
        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            if(Build.VERSION.SDK_INT>=23){
    
                if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
                    requestPermissions(strings,101);
                }
            }
    
            initView();
    
            BluetoothManager manager= (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
            adapter = manager.getAdapter();
    
            myRecevier=new MyRecevier();
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
            registerReceiver(myRecevier,intentFilter);
    
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(myRecevier);
        }
    
        private void initView() {
            bt_close=findViewById(R.id.bt_close);
            bt_open=findViewById(R.id.bt_open);
            bt_scan=findViewById(R.id.bt_scan);
            bt_show=findViewById(R.id.bt_show);
            listView=findViewById(R.id.lv);
            listView2=findViewById(R.id.lv2);
            bt_scan.setOnClickListener(this);
            bt_open.setOnClickListener(this);
            bt_close.setOnClickListener(this);
            bt_show.setOnClickListener(this);
            myAdapter=new MyAdapter(list,MainActivity.this);
            myAdapter2=new MyAdapter(list2,MainActivity.this);
            listView.setAdapter(myAdapter);
            listView2.setAdapter(myAdapter2);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    list.get(position).createBond();
                }
            });
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.bt_open:
                    open();
                    break;
                case R.id.bt_close:
                    close();
                    break;
                case R.id.bt_scan:
                    search();
                    break;
                case R.id.bt_show:
                    show();
                    break;
            }
        }
    
        private void show() {
    
            list2.clear();
            Set<BluetoothDevice> bondedDevices = adapter.getBondedDevices();
            list2.addAll(bondedDevices);
            myAdapter2.notifyDataSetChanged();
    
        }
    
        private void search() {
            list.clear();
            adapter.startDiscovery();
    
        }
    
    
        private void close() {
            adapter.disable();
        }
    
    
        public void open(){
            Intent intent = new Intent();
            intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);
            startActivity(intent);
    
    
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        BluetoothServerSocket bluetoothServerSocket = adapter.listenUsingInsecureRfcommWithServiceRecord(adapter.getName(), uuid);
                        while(true){
                          //  BluetoothSocket socket = bluetoothServerSocket.accept();
                        //  new ServerThread(socket,MainActivity.this).start();
    
                            BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
                            socket.connect();
    
                            BluetoothServerSocket serverSocket = adapter1.listenUsingRfcommWithServiceRecord(adapter1.getName(),uuid);
                            serverSocket.accept();
    
    
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
    
    
    
        }
    
        class MyRecevier extends BroadcastReceiver{
    
            @Override
            public void onReceive(Context context, Intent intent) {
                if(intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
    
                    BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    
                    list.add(device);
                    myAdapter.notifyDataSetChanged();
                }
            }
        }
    
    
    }
    
  • package com.example.administrator.myapplication;
    
    import android.bluetooth.BluetoothDevice;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    
    public class MyAdapter extends BaseAdapter {
        ArrayList<BluetoothDevice> list;
        Context context;
    
        public MyAdapter(ArrayList<BluetoothDevice> list, Context context) {
            this.list = list;
            this.context = context;
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public Object getItem(int position) {
            return list.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder=null;
            if(convertView==null){
                convertView= LayoutInflater.from(context).inflate(R.layout.item1,null);
                viewHolder=new ViewHolder();
                viewHolder.tv_name=convertView.findViewById(R.id.tv_name);
                viewHolder.tv_address=convertView.findViewById(R.id.tv_address);
                convertView.setTag(viewHolder);
            }else{
                viewHolder= (ViewHolder) convertView.getTag();
            }
            viewHolder.tv_name.setText(list.get(position).getName());
            viewHolder.tv_address.setText(list.get(position).getAddress());
            return convertView;
        }
        class ViewHolder{
            TextView tv_name;
            TextView tv_address;
    
    
    
        }
    }
    
  • package com.example.administrator.myapplication;
    
    import android.app.Activity;
    import android.bluetooth.BluetoothSocket;
    import android.util.Log;
    import android.widget.Toast;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class ServerThread extends  Thread {
        private BluetoothSocket socket;
        private Activity context;
    
    
        public ServerThread(BluetoothSocket socket, Activity context) {
            this.socket = socket;
            this.context = context;
        }
    
        @Override
        public void run() {
            super.run();
            context.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.d("ytx", "有人要给我发数据: ");
                    Toast.makeText(context, "有人要给我发数据", Toast.LENGTH_SHORT).show();
                }
            });
            InputStream inputStream = null;
            try {
                inputStream = socket.getInputStream();
                byte[] bytes=new byte[1024];
                int len=0;
                while((len=inputStream.read(bytes))!=-1){
                    final String s = new String(bytes, 0, len);
                    context.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.d("ytx", "发送的数据: "+s);
                            Toast.makeText(context, "发送的数据"+s, Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(inputStream!=null){
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
            }
    
    
        }
    }
    
    
概述GENERAL 1.1 适用范围 APPLICATION 此规格书适用于机械式轻触开关的相关要求 This specification is applied to the requirements for TACTILE SWITCH (MECHANICAL CONTACT) 1.2 工作温度范围 Operating Temperature Range -20℃~80℃(在标准大气压、标准湿度条件下) -20℃~80℃(Normal humidity, normal air pressure) 1.3 贮藏温度范围 Storage Temperature Range -20℃~80℃(在标准大气压、标准湿度条件下) -20℃~80℃(Normal humidity, normal air pressure) 1.4 测试条件 Test Conditions 在没有其它特定的条件下,应该在以下的条件下进行测试和测量: Unless otherwise specified, tests and measurement shall be made in the following standard conditions: 常温…………………………………5℃~35℃ Normal temperature………………5℃~35℃ 标准湿度……………………………相对湿度25%~85% Normal humidity…………………relative humidity 25%~85% 标准大气压…………………………86KPa~106Kpa Normal air pressure…………………86Kpa~106Kpa 在制造过程中,测试和测量应该在以下的条件下进行: If any doubt arise from the judgment, tests shall be conducted at the following conditions: 温度…………………………………20℃±2℃ Temperature………………………20℃±2℃ 相对湿度……………………………65%±5% Relative humidity………………65%±5% 环境气压…………………………86KPa~106Kpa Air pressure…………………………86KPa~106Kpa2、 详细说明 Detailed specification 2.1 外观:应无影响、降低产品性能的缺陷; Appearance: There should be no defects that affect the serviceability of product. 2.2 结构尺寸和安装尺寸:应符合装配图要求 Style and dimension: shall conform to the assemble drawings. 2.3 操作形式:有触觉反应的操作 Type of actuating: Tactile feedback. 2.4 开关结构:单回路单输出(具体的触点结构在装配图中已绘出); Contact arrangement: 1 pole, 1 throw (Details of contact arrangement are given in the assembly drawings.) 2.5 开关工作额定值:DC 12V,50mA(有效值) DC 12V,50mA (最大额定值) DC 1V,10μA (最小额定值) Ratings: 12V DC, 50mA (effective value) 12V DC, 50mA (maximum) 1V DC,10μA (minimum) 3、 电气性能: ELECTRICAL SPECIFICATION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值