Hallo
ich hab jetzt wieder man ein Problem mit den Bluetooth Tethering.
Ich kann Bluetooth an und ausschalten und auch den Status abfragen
Ebenso Bluetooth Tethering an und aus funktioniert.
Ich schaffe es allerdings nicht so recht den Status von Bluetooth Tethering beim Start abzufragen.
Ich möchte das deswegen um den Bluetooth Tethering Switch schon beim start richtig zu setzten.
Ich habe schon vieles Probiert, komme aber auf keinen grünen Zweig.
Das einzige wo ich den Status abfragen kann bzw was funktioniert ist in der
Klasse BTPanServiceListenerCheck
die Variable nowVal zeigt mir richtig True oder False an.
nowVal = (Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0]);
Allerdings weis ich ehrlich gesagt nicht wie ich diese Info nach "onCreate" kriege.
Oder
Die Methode
isBluetoothTetheringEnabled() funktioniert nicht bzw. die variable "check" gibt mir nicht den richtigen status.
Kann mir da jemand einen Tipp geben.
Das kann doch nicht so schwer sein. Ich probier schon seit Stunden.
Gruß
herrm_no
Hier mal der Code
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "Start");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher_bluetooth_tethering_round);
getSupportActionBar().setDisplayUseLogoEnabled(true);
}
//
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 BTPanServiceListenerCheck(MyContext));
Boolean check = (Boolean) mIsBTTetheringOn.invoke(BTSrvInstance, (Object []) noparams);
Toast.makeText(getApplicationContext(), "xxxxx "+ check.toString(), Toast.LENGTH_LONG).show();
//Boolean nowVal;
//nowVal = (Boolean) mIsBTTetheringOn.getClass().getMethod("isTetheringOn", new Class[0]).invoke(mIsBTTetheringOn, new Object[0]);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
//
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
swBluetoothOnOff = findViewById(R.id.switchBluetoothOnOff);
swTetheringOnOff = findViewById(R.id.switchTetheringOnOff);
swBluetoothTetheringOnOff = findViewById(R.id.switchBluetoothTetheringOnOff);
// switch korrekt setzen
swBluetoothOnOff.setChecked(checkBT());
//swTetheringOnOff.setChecked(false);
isBluetoothTetherEnabled();
swTetheringOnOff.setChecked(isBluetoothTetherEnabled());
// switch korrekt setzen END
swBluetoothOnOff.setOnClickListener(swListener);
swTetheringOnOff.setOnClickListener(swListener);
swBluetoothTetheringOnOff.setOnClickListener(swListener);
}
Alles anzeigen
// Check whether Bluetooth tethering is enabled.
private boolean isBluetoothTetherEnabled() {
Boolean check;
try {
if(mBluetoothAdapter != null) {
check = (Boolean) mIsBTTetheringOn.invoke(BTSrvInstance, (Object []) noparams);
return check;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
Alles anzeigen
public class BTPanServiceListenerCheck implements BluetoothProfile.ServiceListener {
private final Context context;
public static boolean state = false;
public BTPanServiceListenerCheck(final Context context) {
this.context = context;
}
@Override
public void onServiceConnected(final int profile,
final BluetoothProfile proxy) {
boolean nowVal;
//Some code must be here or the compiler will optimize away this callback.
Log.i("MyApp", "BTPan proxy connected");
try {
//boolean nowVal = ((Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0])).booleanValue();
nowVal = (Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0]);
Toast.makeText(context, "nowVal = " + nowVal, Toast.LENGTH_SHORT).show();
if (nowVal) {
// proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.FALSE);
// proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.FALSE);
// Toast.makeText(context, "onServiceConnected: Turning bluetooth tethering off", Toast.LENGTH_SHORT).show();
state = true;
} else {
// proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, true);
//proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, new Object[]{Boolean.valueOf(true)});
//proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.TRUE);
// Toast.makeText(context, "onServiceConnected: Turning bluetooth tethering on", Toast.LENGTH_SHORT).show();
state = false;
}
// BluetoothTethering.changeToggleState(state);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(final int profile) {
}
Alles anzeigen