Android 2.3 이상 (2.3 이후 버전)에서 블루투스 테 더링을 프로그래밍 방식으로 사용 또는 사용 중지 할 수있는 방법이 있습니까?Android에서 프로그래밍 방식으로 블루투스 테 더링 상태를 확인하는 방법
사용 여부를 묻는 것이 아니라 현재 사용하도록 설정했는지 여부 만 알 수 있습니다.
Android 2.3 이상 (2.3 이후 버전)에서 블루투스 테 더링을 프로그래밍 방식으로 사용 또는 사용 중지 할 수있는 방법이 있습니까?Android에서 프로그래밍 방식으로 블루투스 테 더링 상태를 확인하는 방법
사용 여부를 묻는 것이 아니라 현재 사용하도록 설정했는지 여부 만 알 수 있습니다.
BluetoothPan (Personal Area Networking)이 테 더링 키워드입니다. 나는 API 문서와 안드로이드 소스 코드를 훑어 보았지만, 주석의 간단한 예는 오도 된 것이다. 이 포스터는 예를 제공하지만 난 처음에 그것으로 문제가 있었다 : 나는 BT 장치의 IP 주소를 확인하는 등 다양한 다른 방법을 시도
Android BluetoothPAN to create TCP/IP network between Android device and Windows7 PC
. 그러나 블루투스 네트워크 장치가 없으므로 확인할 IP가 없습니다. Detect USB tethering on android
위로 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) {
}
}
isTetheringOn을 호출하는 동안 동일한 코드를 사용하지만 호출 대상 예외를 시도했습니다. bluetooth 및 bt admin 권한을 모두 등록했습니다. –
나를 위해 일하지 않습니다 ... 예외는 아니지만 값은 false로 유지됩니다. – Tobliug
Not working :-(예외는 아니지만 값은 false로 유지됩니다. – Gattsu