有没有办法找出蓝牙网络中启用或程序的Android 2.3+禁用(2.3+之后的任何版本)?
我没有要求启用/禁用它,但只知道它是否是当前还是未启用。
有没有办法找出蓝牙网络中启用或程序的Android 2.3+禁用(2.3+之后的任何版本)?
我没有要求启用/禁用它,但只知道它是否是当前还是未启用。
事实证明,BluetoothPan(个人区域网络)是圈养的关键字。 我凝视着API文档和Android源代码,但在评论简短的例子是误导性的。 这张海报提供了一个例子,但我有麻烦与它最初:
Android的BluetoothPAN打造的Android设备和Windows7 PC之间的TCP / IP网络
我试过各种方法,包括检查BT设备的IP地址。 但是没有蓝牙网络设备存在,所以没有IP检查。
检测在Android USB绑定
回到BluetoothPan代码...在第一线的例子是不完整的(没有的ServiceListener实现)。 我尝试了标准之一,但isTetheringOn代理调用失败。 的关键部分是该onServiceConnected()回调需要的代码中的至少一个行或者编译器优化它扔掉。 它也像大多数其他的例子有不应断开代理。 这里是工作的代码:
BluetoothAdapter mBluetoothAdapter = null;
Class<?> classBluetoothPan = null;
Constructor<?> BTPanCtor = null;
Object BTSrvInstance = null;
Class<?> noparams[] = {};
Method mIsBTTetheringOn;
@Override
public void onCreate() {
Context MyContext = getApplicationContext();
mBluetoothAdapter = getBTAdapter();
try {
classBluetoothPan = Class.forName("android.bluetooth.BluetoothPan");
mIsBTTetheringOn = classBluetoothPan.getDeclaredMethod("isTetheringOn", noparams);
BTPanCtor = classBluetoothPan.getDeclaredConstructor(Context.class, BluetoothProfile.ServiceListener.class);
BTPanCtor.setAccessible(true);
BTSrvInstance = BTPanCtor.newInstance(MyContext, new BTPanServiceListener(MyContext));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private BluetoothAdapter getBTAdapter() {
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1)
return BluetoothAdapter.getDefaultAdapter();
else {
BluetoothManager bm = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
return bm.getAdapter();
}
}
// Check whether Bluetooth tethering is enabled.
private boolean IsBluetoothTetherEnabled() {
try {
if(mBluetoothAdapter != null) {
return (Boolean) mIsBTTetheringOn.invoke(BTSrvInstance, (Object []) noparams);
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public class BTPanServiceListener implements BluetoothProfile.ServiceListener {
private final Context context;
public BTPanServiceListener(final Context context) {
this.context = context;
}
@Override
public void onServiceConnected(final int profile,
final BluetoothProfile proxy) {
//Some code must be here or the compiler will optimize away this callback.
Log.i("MyApp", "BTPan proxy connected");
}
@Override
public void onServiceDisconnected(final int profile) {
}
}