long uuidHigh = new BigInteger("11bc4f7154ac9edb", 16).longValue();
long uuidLow = new BigInteger("167bf05f9436bc0a", 16).longValue();
UUID uuid = new UUID(uuidHigh, uuidLow);
BluetoothSocket socket = null;
BluetoothAdapter blueAdapter = null;
blueAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = blueAdapter.getRemoteDevice("00:07:AB:6A:96:7D");
try {
socket = device.createRfcommSocketToServiceRecord(uuid); // CRASH!
} catch (IOException e) { e.printStackTrace(); }
Результат:
E / AndroidRuntime (14079): java.lang.IllegalStateException: не удалось выполнить метод действия
Операторы непосредственно перед оператором "socket =" в том же методе выполняются нормально. Получение устройства, кажется, работает нормально с getName (), работающим на нем.
Физическое устройство, на котором оно работает, имеет API 8.
Руководство разработчика Bluetooth загадочно говорит:
// MY_UUID is the app's UUID string, also used by the server code
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
Но createRfcommSocketToServiceRecord () не может принимать строку, она должна принимать UUID.
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="intrax.demo.explore"
android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
<activity
android:name=".BluetoothAct" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>