我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 取消蓝牙配对框实现自动配对功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 取消蓝牙配对框实现自动配对功能

我看了几个文章,主要是接受配对广播,然后设置pin,实现配对,但是网上的大部分手机是不可以的,Android.bluetoothdevice 下 action_pair_request ,没有定义这个,开始困扰了我一点时间,实现难度:是否能进入那个广播响应

定义了一个类,这个是网上的可以直接用


package zicox.esc; 
import java.lang.reflect.Method; 
import java.lang.reflect.Field; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.util.Log; 
public class ClsUtils 
{ 
   
  static public boolean createBond(Class btClass, BluetoothDevice btDevice) 
  throws Exception www.jb51.net
  { 
    Method createBondMethod = btClass.getMethod("createBond"); 
    Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice); 
    return returnValue.booleanValue(); 
  } 
   
  static public boolean removeBond(Class btClass, BluetoothDevice btDevice) 
      throws Exception 
  { 
    Method removeBondMethod = btClass.getMethod("removeBond"); 
    Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice); 
    return returnValue.booleanValue(); 
  } 
  static public boolean setPin(Class btClass, BluetoothDevice btDevice, 
      String str) throws Exception 
  { 
    try 
    { 
      Method removeBondMethod = btClass.getDeclaredMethod("setPin", 
          new Class[] 
          {byte[].class}); 
      Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice, 
          new Object[] 
          {str.getBytes()}); 
      Log.e("returnValue", "" + returnValue); 
    } 
    catch (SecurityException e) 
    { 
      // throw new RuntimeException(e.getMessage()); 
      e.printStackTrace(); 
    } 
    catch (IllegalArgumentException e) 
    { 
      // throw new RuntimeException(e.getMessage()); 
      e.printStackTrace(); 
    } 
    catch (Exception e) 
    { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
    return true; 
  } 
  // 取消用户输入 
  static public boolean cancelPairingUserInput(Class btClass, 
      BluetoothDevice device) 
  throws Exception 
  { 
    Method createBondMethod = btClass.getMethod("cancelPairingUserInput"); 
    // cancelBondProcess() 
    Boolean returnValue = (Boolean) createBondMethod.invoke(device); 
    return returnValue.booleanValue(); 
  } 
  // 取消配对 
  static public boolean cancelBondProcess(Class btClass, 
      BluetoothDevice device) 
  throws Exception 
  { 
    Method createBondMethod = btClass.getMethod("cancelBondProcess"); 
    Boolean returnValue = (Boolean) createBondMethod.invoke(device); 
    return returnValue.booleanValue(); 
  } 
   
  static public void printAllInform(Class clsShow) 
  { 
    try 
    { 
      // 取得所有方法 
      Method[] hideMethod = clsShow.getMethods(); 
      int i = 0; 
      for (; i < hideMethod.length; i++) 
      { 
        Log.e("method name", hideMethod[i].getName() + ";and the i is:" 
            + i); 
      } 
      // 取得所有常量 
      Field[] allFields = clsShow.getFields(); 
      for (i = 0; i < allFields.length; i++) 
      { 
        Log.e("Field name", allFields[i].getName()); 
      } 
    } 
    catch (SecurityException e) 
    { 
      // throw new RuntimeException(e.getMessage()); 
      e.printStackTrace(); 
    } 
    catch (IllegalArgumentException e) 
    { 
      // throw new RuntimeException(e.getMessage()); 
      e.printStackTrace(); 
    } 
    catch (Exception e) 
    { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 
  static public boolean pair(String strAddr, String strPsw) 
  { 
    boolean result = false; 
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter 
        .getDefaultAdapter(); 
    bluetoothAdapter.cancelDiscovery(); 
    if (!bluetoothAdapter.isEnabled()) 
    { 
      bluetoothAdapter.enable(); 
    } 
    if (!BluetoothAdapter.checkBluetoothAddress(strAddr)) 
    { // 检查蓝牙地址是否有效 
      Log.d("mylog", "devAdd un effient!"); 
    } 
    BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr); 
    if (device.getBondState() != BluetoothDevice.BOND_BONDED) 
    { 
      try 
      { 
        Log.d("mylog", "NOT BOND_BONDED"); 
        ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 
        ClsUtils.createBond(device.getClass(), device); 
//        remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice 
        result = true; 
      } 
      catch (Exception e) 
      { 
        // TODO Auto-generated catch block 
        Log.d("mylog", "setPiN failed!"); 
        e.printStackTrace(); 
      } // 
    } 
    else 
    { 
      Log.d("mylog", "HAS BOND_BONDED"); 
      try 
      { 
        ClsUtils.createBond(device.getClass(), device); 
        ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 
        ClsUtils.createBond(device.getClass(), device); 
//        remoteDevice = device; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice 
        result = true; 
      } 
      catch (Exception e) 
      { 
        // TODO Auto-generated catch block 
        Log.d("mylog", "setPiN failed!"); 
        e.printStackTrace(); 
      } 
    } 
    return result; 
  } 
} 
//================================================================================================================================

还有一部分 activity


//================================================================================================================================
package zicox.esc; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.lang.reflect.Method; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.UUID; 
import android.app.Activity; 
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.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.ToggleButton; 
public class Demo_ad_escActivity extends Activity 
{ 
  //--------------------------------------------------- 
  public static String ErrorMessage; 
  Button btnSearch, btnDis, btnExit; 
  ToggleButton tbtnSwitch;  
  ListView lvBTDevices;  
  ArrayAdapter<String> adtDevices;  
  List<String> lstDevices = new ArrayList<String>();  
  BluetoothAdapter btAdapt;  
  public static BluetoothSocket btSocket; 
  //--------------------------------------------------- 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
   // if(!ListBluetoothDevice())finish(); 
    Button Button1 = (Button) findViewById(R.id.button1); 
    ErrorMessage = ""; 
    //--------------------------------------------------- 
    btnSearch = (Button) this.findViewById(R.id.btnSearch);  
    btnSearch.setOnClickListener(new ClickEvent());  
    btnExit = (Button) this.findViewById(R.id.btnExit);  
    btnExit.setOnClickListener(new ClickEvent());  
    btnDis = (Button) this.findViewById(R.id.btnDis);  
    btnDis.setOnClickListener(new ClickEvent());  
    // ToogleButton设置  
    tbtnSwitch = (ToggleButton) this.findViewById(R.id.toggleButton1);  
    tbtnSwitch.setOnClickListener(new ClickEvent()); 
    // ListView及其数据源 适配器  
    lvBTDevices = (ListView) this.findViewById(R.id.listView1);  
    adtDevices = new ArrayAdapter<String>(this,  
        android.R.layout.simple_list_item_1, lstDevices);  
    lvBTDevices.setAdapter(adtDevices);  
    lvBTDevices.setOnItemClickListener(new ItemClickEvent());  
    btAdapt = BluetoothAdapter.getDefaultAdapter();// 初始化本机蓝牙功能  
    if (btAdapt.isEnabled()) 
      tbtnSwitch.setChecked(false);  
    else 
      tbtnSwitch.setChecked(true);   
     // 注册Receiver来获取蓝牙设备相关的结果 
    String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST"; 
    IntentFilter intent = new IntentFilter();  
    intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver来取得搜索结果  
    intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);  
    intent.addAction(ACTION_PAIRING_REQUEST); 
    intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);  
    intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);  
    registerReceiver(searchDevices, intent);  
    Button1.setOnClickListener(new Button.OnClickListener() 
    { 
      public void onClick(View arg0) 
      { 
  //     Print1(SelectedBDAddress); 
      } 
    }); 
  } 
//--------------------------------------------------- 
  private BroadcastReceiver searchDevices = new BroadcastReceiver() {  
    public void onReceive(Context context, Intent intent) {  
      String action = intent.getAction();  
      Bundle b = intent.getExtras();  
      Object[] lstName = b.keySet().toArray();  
      // 显示所有收到的消息及其细节  
      for (int i = 0; i < lstName.length; i++) {  
        String keyName = lstName[i].toString();  
        Log.e(keyName, String.valueOf(b.get(keyName)));  
      }  
      BluetoothDevice device = null;  
      // 搜索设备时,取得设备的MAC地址  
      if (BluetoothDevice.ACTION_FOUND.equals(action)) {  
        device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  
        if (device.getBondState() == BluetoothDevice.BOND_NONE) {  
          String str = "未配对|" + device.getName() + "|"  
              + device.getAddress();  
          if (lstDevices.indexOf(str) == -1)// 防止重复添加  
            lstDevices.add(str); // 获取设备名称和mac地址  
          adtDevices.notifyDataSetChanged(); 
          try { 
            ClsUtils.setPin(device.getClass(),device,"0000"); 
          } catch (Exception e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
          } 
          try { 
            ClsUtils.cancelPairingUserInput(device.getClass(), device); 
          } catch (Exception e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
          } 
        }  
      }else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)){  
        device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  
        switch (device.getBondState()) {  
        case BluetoothDevice.BOND_BONDING:  
          Log.d("BlueToothTestActivity", "正在配对......");  
          break;  
        case BluetoothDevice.BOND_BONDED:  
          Log.d("BlueToothTestActivity", "完成配对");  
          connect(device);//连接设备  
          break;  
        case BluetoothDevice.BOND_NONE:  
          Log.d("BlueToothTestActivity", "取消配对");  
        default:  
          break;  
        }  
      }  
      if (intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")) 
      { 
        Log.e("tag11111111111111111111111", "ddd"); 
        BluetoothDevice btDevice = intent 
            .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
        // byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234"); 
        // device.setPin(pinBytes); 
        try 
        { 
          ClsUtils.setPin(btDevice.getClass(), btDevice, "0000"); // 手机和蓝牙采集器配对 
          ClsUtils.createBond(btDevice.getClass(), btDevice); 
          ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice); 
        } 
        catch (Exception e) 
        { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
        } 
      } 
    } 
  }; 
  class ItemClickEvent implements AdapterView.OnItemClickListener {  
    @Override  
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
        long arg3) {  
      if(btAdapt.isDiscovering())btAdapt.cancelDiscovery();  
      String str = lstDevices.get(arg2);  
      String[] values = str.split("\\|");  
      String address = values[2];  
      Log.e("address", values[2]);  
      BluetoothDevice btDev = btAdapt.getRemoteDevice(address);  
      try {  
        Boolean returnValue = false;  
        if (btDev.getBondState() == BluetoothDevice.BOND_NONE) {  
          //利用反射方法调用BluetoothDevice.createBond(BluetoothDevice remoteDevice);  
//          Method createBondMethod = BluetoothDevice.class.getMethod("createBond");  
//          Log.d("BlueToothTestActivity", "开始配对");  
//          returnValue = (Boolean) createBondMethod.invoke(btDev);  
          ClsUtils.pair(address, "0000"); 
          showMessage("here"); 
        }else if(btDev.getBondState() == BluetoothDevice.BOND_BONDED){  
          connect(btDev);  
        }  
      } catch (Exception e) {  
        e.printStackTrace();  
      }  
    }  
  }  
  private void connect(BluetoothDevice btDev) { 
    final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 
    UUID uuid = SPP_UUID;  
    try {  
      btSocket = btDev.createRfcommSocketToServiceRecord(uuid);  
      Log.d("BlueToothTestActivity", "开始连接...");  
      btSocket.connect();  
    } catch (IOException e) {  
      // TODO Auto-generated catch block  
      e.printStackTrace();  
    }  
  }  
  class ClickEvent implements View.OnClickListener {  
    @Override  
    public void onClick(View v) {  
      if (v == btnSearch)// 搜索蓝牙设备,在BroadcastReceiver显示结果  
      {  
        if (btAdapt.getState() == BluetoothAdapter.STATE_OFF) {// 如果蓝牙还没开启  
          Toast.makeText(Demo_ad_escActivity.this, "请先打开蓝牙", 1000).show();          return;  
        }  
        if (btAdapt.isDiscovering())  
          btAdapt.cancelDiscovery();  
        lstDevices.clear();  
        Object[] lstDevice = btAdapt.getBondedDevices().toArray();  
        for (int i = 0; i < lstDevice.length; i++) {  
          BluetoothDevice device = (BluetoothDevice) lstDevice[i];  
          String str = "已配对|" + device.getName() + "|"  
              + device.getAddress();  
          lstDevices.add(str); // 获取设备名称和mac地址  
          adtDevices.notifyDataSetChanged();  
        }  
        setTitle("本机蓝牙地址:" + btAdapt.getAddress());  
        btAdapt.startDiscovery();  
      } else if (v == tbtnSwitch) {// 本机蓝牙启动/关闭  
        if (tbtnSwitch.isChecked() == false)  
          btAdapt.enable();  
        else if (tbtnSwitch.isChecked() == true)  
          btAdapt.disable();  
      } else if (v == btnDis)// 本机可以被搜索  
      {  
        Intent discoverableIntent = new Intent(  
            BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);  
        discoverableIntent.putExtra(  
            BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);  
        startActivity(discoverableIntent);  
      } else if (v == btnExit) {  
        try {  
          if (btSocket != null)  
            btSocket.close();  
        } catch (IOException e) {  
          e.printStackTrace();  
        }  
        Demo_ad_escActivity.this.finish();  
      }  
    }  
  } 
  @Override  
  protected void onDestroy() {  
    this.unregisterReceiver(searchDevices);  
    super.onDestroy();  
    android.os.Process.killProcess(android.os.Process.myPid());  
  }  
  public void showMessage(String str) 
  { 
    Toast.makeText(this,str, Toast.LENGTH_LONG).show(); 
  } 
}

以上所述是小编给大家介绍的Android 取消蓝牙配对框实现自动配对功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文章:native.js获取手机硬件基本信息实例代码android版Dcloud的native.js直接拨打电话Android实例代码DCloud的native.js调用系统分享实例Android版代码Android蓝牙开发深入解析详解Android——蓝牙技术 带你实现终端间数据传输Android Bluetooth蓝牙技术使用流程详解Android单片机与蓝牙模块通信实例代码分享Android 蓝牙4.0(ble)开发的解决方案android实现蓝牙文件发送的实例代码,支持多种机型Android手机通过蓝牙连接佳博打印机的实例代码Android系统中的蓝牙连接程序编写实例教程Android蓝牙通信聊天实现发送和接受功能Android适配安卓6.0蓝牙通讯实现过程Android编程之蓝牙测试实例Android 获取蓝牙Mac地址的正确方法Android 蓝牙2.0的使用方法详解Android实现蓝牙客户端与服务器端通信示例Android 蓝牙连接 ESC/POS 热敏打印机打印实例(蓝牙连接篇)Android提高之蓝牙传感应用实例Android开发实现实时检测蓝牙连接状态的方法【附源码下载】Native.js获取监听开关等操作Android蓝牙设备实例代码


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android 取消蓝牙配对框实现自动配对功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android 取消蓝牙配对框实现自动配对功能

我看了几个文章,主要是接受配对广播,然后设置pin,实现配对,但是网上的大部分手机是不可以的,Android.bluetoothdevice 下 action_pair_request ,没有定义这个,开始困扰了我一点时间,实现难度:是否能
2022-06-06

android接收到蓝牙配对请求时如何点亮屏幕具体实现

file: BluetoothEventLoop.java GB/GB2/GB3: 1. import android.os.PowerManager; 2. 变量申明:private PowerManager.WakeLock mWake
2022-06-06

Android实现自动匹配关键字并且标红功能

本文实例为大家分享了Android匹配关键字标红的具体代码,供大家参考,具体内容如下1. 单关键字匹配若只需匹配 搜索内容 可以写的简单一些,代码如下:if (name != null && name.contains(mKeyWord)
2023-05-31

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录