国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 取消藍牙配對框實現自動配對功能

2019-12-12 03:43:59
字體:
來源:轉載
供稿:網友

我看了幾個文章,主要是接受配對廣播,然后設置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 {   /**   * 與設備配對 參考源碼:platform/packages/apps/Settings.Git   * /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java   */   static public boolean createBond(Class btClass, BluetoothDevice btDevice)   throws Exception m.survivalescaperooms.com  {     Method createBondMethod = btClass.getMethod("createBond");     Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice);     return returnValue.booleanValue();   }   /**   * 與設備解除配對 參考源碼:platform/packages/apps/Settings.git   * /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java   */   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();   }   /**   *   * @param clsShow   */   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("http://|");        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 取消藍牙配對框實現自動配對功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泗水县| 临安市| 体育| 德清县| 都兰县| 阿瓦提县| 南部县| 公安县| 新兴县| 天祝| 南京市| 长泰县| 卢氏县| 闽清县| 宁武县| 图木舒克市| 新野县| 侯马市| 修水县| 罗田县| 二连浩特市| 庆安县| 大足县| 庆城县| 同心县| 德令哈市| 普洱| 金堂县| 霍邱县| 岳西县| 微山县| 临江市| 弥勒县| 阜新| 黎城县| 鄢陵县| 张家口市| 昆山市| 柘城县| 襄樊市| 阿鲁科尔沁旗|