優化Android搜尋藍牙裝置方式(API 21)

Android 6.0(API 21)以後, 搜尋藍芽裝置的方式改成:

BluetoothAdapter.startScan (ScanCallback callback)

這種方式我一直用了很久, 也沒遇到問題.

直到有一個需求是隨時監控廣播封包,

這種寫法就會遇到問題, 無法快速取得周遭藍牙廣播資料, 因此需要修改寫法, 把能下的藥都下下去(但耗電):

final List<ScanFilter> filters = new ArrayList<>();
ScanFilter filter = new ScanFilter.Builder().build();
filters.add(filter);

final ScanSettings scanSettings =
        new ScanSettings.Builder() .setNumOfMatches(ScanSettings.MATCH_NUM_MAX_ADVERTISEMENT).setMatchMode(ScanSettings.MATCH_MODE_STICKY).setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();


BluetoothAdapter.getBluetoothLeScanner().startScan(filters,scanSettings,mLeScanCallback);

Android NFC啟用 小工具 NfcToggler

咖啡偶手機小米6原本刷成 LineageOS 15.1 , 但後來為了使用NFC-SIM 悠遊卡 , 只好捨去 LOS , 改刷成小米國際版, 這個版本可以讓NFC功能從Google Pay的HCE功能, 切換 SIM 錢包(也就是nfc-sim)功能.

但是問題來了, 我認為 NFC 平常要關閉,

原本 LOS 15.1內建快速切換工具, 滑下來按一下就可以啟用與停用.

但小米的國際版本不行, 只能選來選去然後停用, 因此寫了一隻小工具widget (需要ROOT) , 按一下就可以方便的啟用與停用, 有興趣可以點選這裡參考看看.

#android

#taiwan

#nfc

 

ubuntu 無法辨識android裝置no permissions

ubuntu連線到android裝置很方便, 安裝程式很簡單:

sudo apt install android-tools-adb android-tools-fastboot

但是常常卡到執行指令 adb devices 想要列出手機時, 出現 no premissions的錯誤

List of devices attached 
????????????    no permissions

原來是要設定usb連線權限
1. 找出google 的裝置

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0a2b Intel Corp. 
Bus 001 Device 002: ID 05c8:03a2 Cheng Uei Precision Industry Co., Ltd (Foxlink) 
Bus 001 Device 006: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2. 將該device加到 /etc/udev/rules.d/70-android.rules
70代號可改, 無此檔案也可自行新增
新增內容如下:

SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"

3. 重開

  sudo /etc/init.d/udev restart 

4. 拔掉usb線, 讓手機重新接受電腦連線

PS.

手機不同狀態下(sideload , recovery , system) 都可能有不同的usb id


android 刷機好法子”側邊載入(sideload)”

咖啡偶的目前手機是小米6, 因為常常刷機, 版本差異又大,每次刷機,必須重新格式化手機,

因此會用到usb otg, 把要刷的rom放到usb磁碟上, 當手機進入 recovery 的時候, 就可以放心格式化手機, 並且把usb上的rom刷入手機.

但是這方式有點麻煩,需要準備平時也用不著的usb ota,

所以很久以前android就發展sideload的方式刷機, 電腦直接刷rom進去手機, 這就方便多了.

1.手機進入recovery的sideload等待畫面

 

 

 

 

 

 

 

 

 

2.電腦使用adb sideload 指令刷入rom

1 2 3 4