createBond() を呼び出し、android.bluetooth.device.action.PAIRING_REQUEST のブロードキャスト レシーバーを登録し、PIN コードを手動で入力してペアリングすることで、Bluetooth デバイスと自動的にペアリングするコードがいくつかあります。
これは、これまでテストされた Android 4.0 までのすべてのデバイスでうまく機能しましたが、今日、Android 4.2.1 を搭載した Nexus 7 でこれを試したところ、次のエラーが発生しました。
java.lang.noSuchMethodException: android.bluetooth.IBluetooth.createBond
彼らは実際にこの関数をライブラリから削除しましたか?
アップデート
実際に起こっているのは、createBond を呼び出すために使用している IBluetooth インターフェイス オブジェクトが初期化されていないことです。次のコードでは、BTBinder という名前の IBinder を取得しようとする行が null を返します。このプロセスが失敗すると、最後に BTInterface が null に設定されます。だから、私の質問は、Android 4.2.1 を搭載した Nexus 7 でバインダーを取得する呼び出しが null を返すのに、テストした他の 5 つのデバイスで正しく動作するのはなぜですか?
public static IBluetooth getBluetoothInterface()
{
//Gets a bluetooth interface from private Android system API
IBluetooth BTInterface = null;
try
{
Class<?> ServiceManager = Class.forName("android.os.ServiceManager");
Method getService = ServiceManager.getDeclaredMethod("getService", String.class);
IBinder BTBinder = (IBinder) getService.invoke(null, "bluetooth");
Class<?> IBluetooth = Class.forName("android.bluetooth.IBluetooth");
Class<?>[] IBluetoothClasses = IBluetooth.getDeclaredClasses();
Class<?> IBluetoothClass0 = IBluetoothClasses[0];
Method asInterface = IBluetoothClass0.getDeclaredMethod("asInterface",IBinder.class);
asInterface.setAccessible(true);
BTInterface = (IBluetooth) asInterface.invoke(null, BTBinder);
}
catch (Exception e)
{
return null;
}
return BTInterface;
}