BluetoothTethering Status abfrage

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • BluetoothTethering Status abfrage

    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.

    Quellcode

    1. 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. :S X/ ;(
    Gruß
    herrm_no




    Hier mal der Code

    Quellcode

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. Log.d(TAG, "Start");
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. if (getSupportActionBar() != null) {
    7. getSupportActionBar().setDisplayShowHomeEnabled(true);
    8. getSupportActionBar().setLogo(R.mipmap.ic_launcher_bluetooth_tethering_round);
    9. getSupportActionBar().setDisplayUseLogoEnabled(true);
    10. }
    11. //
    12. MyContext = getApplicationContext();
    13. mBluetoothAdapter = getBTAdapter();
    14. try {
    15. classBluetoothPan = Class.forName("android.bluetooth.BluetoothPan");
    16. mIsBTTetheringOn = classBluetoothPan.getDeclaredMethod("isTetheringOn", noparams);
    17. BTPanCtor = classBluetoothPan.getDeclaredConstructor(Context.class, BluetoothProfile.ServiceListener.class);
    18. BTPanCtor.setAccessible(true);
    19. BTSrvInstance = BTPanCtor.newInstance(MyContext, new BTPanServiceListenerCheck(MyContext));
    20. Boolean check = (Boolean) mIsBTTetheringOn.invoke(BTSrvInstance, (Object []) noparams);
    21. Toast.makeText(getApplicationContext(), "xxxxx "+ check.toString(), Toast.LENGTH_LONG).show();
    22. //Boolean nowVal;
    23. //nowVal = (Boolean) mIsBTTetheringOn.getClass().getMethod("isTetheringOn", new Class[0]).invoke(mIsBTTetheringOn, new Object[0]);
    24. } catch (ClassNotFoundException e) {
    25. e.printStackTrace();
    26. } catch (Exception e) {
    27. e.printStackTrace();
    28. }
    29. //
    30. mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    31. swBluetoothOnOff = findViewById(R.id.switchBluetoothOnOff);
    32. swTetheringOnOff = findViewById(R.id.switchTetheringOnOff);
    33. swBluetoothTetheringOnOff = findViewById(R.id.switchBluetoothTetheringOnOff);
    34. // switch korrekt setzen
    35. swBluetoothOnOff.setChecked(checkBT());
    36. //swTetheringOnOff.setChecked(false);
    37. isBluetoothTetherEnabled();
    38. swTetheringOnOff.setChecked(isBluetoothTetherEnabled());
    39. // switch korrekt setzen END
    40. swBluetoothOnOff.setOnClickListener(swListener);
    41. swTetheringOnOff.setOnClickListener(swListener);
    42. swBluetoothTetheringOnOff.setOnClickListener(swListener);
    43. }
    Alles anzeigen


    Quellcode

    1. // Check whether Bluetooth tethering is enabled.
    2. private boolean isBluetoothTetherEnabled() {
    3. Boolean check;
    4. try {
    5. if(mBluetoothAdapter != null) {
    6. check = (Boolean) mIsBTTetheringOn.invoke(BTSrvInstance, (Object []) noparams);
    7. return check;
    8. }
    9. } catch (Exception e) {
    10. e.printStackTrace();
    11. }
    12. return false;
    13. }
    Alles anzeigen

    Quellcode

    1. public class BTPanServiceListenerCheck implements BluetoothProfile.ServiceListener {
    2. private final Context context;
    3. public static boolean state = false;
    4. public BTPanServiceListenerCheck(final Context context) {
    5. this.context = context;
    6. }
    7. @Override
    8. public void onServiceConnected(final int profile,
    9. final BluetoothProfile proxy) {
    10. boolean nowVal;
    11. //Some code must be here or the compiler will optimize away this callback.
    12. Log.i("MyApp", "BTPan proxy connected");
    13. try {
    14. //boolean nowVal = ((Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0])).booleanValue();
    15. nowVal = (Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0]);
    16. Toast.makeText(context, "nowVal = " + nowVal, Toast.LENGTH_SHORT).show();
    17. if (nowVal) {
    18. // proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.FALSE);
    19. // proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.FALSE);
    20. // Toast.makeText(context, "onServiceConnected: Turning bluetooth tethering off", Toast.LENGTH_SHORT).show();
    21. state = true;
    22. } else {
    23. // proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, true);
    24. //proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, new Object[]{Boolean.valueOf(true)});
    25. //proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.TRUE);
    26. // Toast.makeText(context, "onServiceConnected: Turning bluetooth tethering on", Toast.LENGTH_SHORT).show();
    27. state = false;
    28. }
    29. // BluetoothTethering.changeToggleState(state);
    30. } catch (IllegalAccessException e) {
    31. // TODO Auto-generated catch block
    32. e.printStackTrace();
    33. } catch (IllegalArgumentException e) {
    34. // TODO Auto-generated catch block
    35. e.printStackTrace();
    36. } catch (InvocationTargetException e) {
    37. // TODO Auto-generated catch block
    38. e.printStackTrace();
    39. } catch (NoSuchMethodException e) {
    40. // TODO Auto-generated catch block
    41. e.printStackTrace();
    42. }
    43. }
    44. @Override
    45. public void onServiceDisconnected(final int profile) {
    46. }
    Alles anzeigen
  • Hi,
    also in meiner Demo-App (auf dem S8) wurde der BluetoothProfile.ServiceListener direkt nach dem Start ausgeführt und ich habe dann entsprechend den Button-Text gesetzt.

    Java-Quellcode

    1. //Set Button Text
    2. if ((Boolean) isTetheringOn.invoke(instance, null)) {
    3. toggleBTButton.setText("Turn off");
    4. } else {
    5. toggleBTButton.setText("Turn on");
    6. }
    Das sollte doch eigentlich bei dir dann auch so funktionieren?
  • Hey
    genau das ist mein Problem. Das will bei mir einfach so nicht laufen.
    Ich werde es jetzt aber nochmal probieren.
    Ich hatte auch grössere Probleme deine App überhaupt zum laufen zu bringen und als sie dann lief hat sie nicht so funktioniert wie sie eigentlich sollte.

    Ich bin auch immer noch dabei zu lernen und bin echt sehr daran interessiert was bei dir anders läuft als bei mir.
    Ich versuch es jetzt nochmal und melde mich dann. > dauert aber wahrscheinlich bis morgen.

    Gruß
  • Hallo ich mische mich mal dazu

    Also ich habe auch mal das Test Beispiel von @Xcreen getestet läuft ohne Probleme. Unter AS 3.4 und auch Gradle 5.1.1 habe aber auch die dependencies angepasst.

    In der onCreate brauchst du doch nur den Button abfragen. Oder willst du den Button gar nicht haben? Wenn ja mache dir eine Variable in der du den Status speicherst.

    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'



    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0-alpha03'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha03'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    Ein Feedback auf Tipps ist auch schön. :P
  • Hey
    so, hab es jetzt nochmal probiert.
    Ich kapier einfach nicht so recht das Android System
    Ich hab es nun an verschiedenen Handy's ausprobiert
    1) Samsung Galaxy S3 API18
    Dein Code funktioniert
    2) LG Moto Android 8.1 API27
    Dein Code funktioniert
    3) LG G4 API23
    Dein Code funktioniert hier nicht
    Er springt nach setTetherinigOn.invoke... immer gleich auch catch

    Was kann den hierführ der Grund sein.
    @jogimuc: ja in meinem Code ist es nicht als innere Classe: Das war aber die einzige Möglichkeit wo ich zumindest den aktuellen Status von Tethering bekommen habe.

    Das Hauptproblem liegt jetzt entweder auf meinem G4 oder dem API23

    Wenn ich mir den Logcut (verbose) anschaue dann ist es vielleicht ein Problem mit "Write Settings"
    Aber was muss ich da anders machen.
    Wenn ich im Manifest die SDK23 WRITE Settings verwende ist es vom System nicht rot markiert
    verwende ich die normale "WRITE SETTINGS" permission ist es rot markiert
    Liegt da hier vielleicht mein Problem
    (Das original angehängte Manifest hat natürlich nur eins von beiden ohne das "oder")
    Ich habe beide Zeilen ausprobiert und die Fehlermeldung ist die gleiche.

    Gruß


    Quellcode

    1. public void onClick(View v) {
    2. try {
    3. //Check if BT-Tethering is on
    4. if((Boolean)isTetheringOn.invoke(instance, null)) {
    5. Log.i("MainActivity", "Turn Tethering off");
    6. setTetheringOn.invoke(instance, false);
    7. toggleBTButton.setText("Turn on");
    8. }
    9. else {
    10. Log.i("MainActivity", "Turn Tethering on");
    11. setTetheringOn.invoke(instance, true);
    12. toggleBTButton.setText("Turn off");
    13. }
    14. }
    15. catch (Exception ex){
    16. ex.printStackTrace();
    17. }
    Alles anzeigen

    Quellcode

    1. 04-19 09:36:43.478 17919-17919/de.strait.bluetoothtethering W/System.err: java.lang.reflect.InvocationTargetException
    2. 04-19 09:36:43.484 17919-17919/de.strait.bluetoothtethering W/System.err: at java.lang.reflect.Method.invoke(Native Method)
    3. 04-19 09:36:43.492 17919-17919/de.strait.bluetoothtethering W/System.err: at de.strait.bluetoothtethering.MainActivity$1.onClick(MainActivity.java:63)
    4. 04-19 09:36:43.499 17919-17919/de.strait.bluetoothtethering W/System.err: at android.view.View.performClick(View.java:5201)
    5. 04-19 09:36:43.505 17919-17919/de.strait.bluetoothtethering W/System.err: at android.view.View$PerformClick.run(View.java:21209)
    6. 04-19 09:36:43.510 17919-17919/de.strait.bluetoothtethering W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
    7. 04-19 09:36:43.514 17919-17919/de.strait.bluetoothtethering W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
    8. 04-19 09:36:43.519 17919-17919/de.strait.bluetoothtethering W/System.err: at android.os.Looper.loop(Looper.java:148)
    9. 04-19 09:36:43.524 17919-17919/de.strait.bluetoothtethering W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5525)
    10. 04-19 09:36:43.528 17919-17919/de.strait.bluetoothtethering W/System.err: at java.lang.reflect.Method.invoke(Native Method)
    11. 04-19 09:36:43.533 17919-17919/de.strait.bluetoothtethering W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
    12. 04-19 09:36:43.538 17919-17919/de.strait.bluetoothtethering W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
    13. 04-19 09:36:43.546 17919-17919/de.strait.bluetoothtethering W/System.err: Caused by: java.lang.SecurityException: de.strait.bluetoothtethering was not granted this permission: android.permission.WRITE_SETTINGS.
    14. 04-19 09:36:43.599 17919-17919/de.strait.bluetoothtethering W/System.err: at android.os.Parcel.readException(Parcel.java:1599)
    15. 04-19 09:36:43.603 17919-17919/de.strait.bluetoothtethering W/System.err: at android.os.Parcel.readException(Parcel.java:1552)
    16. 04-19 09:36:43.608 17919-17919/de.strait.bluetoothtethering W/System.err: at android.bluetooth.IBluetoothPan$Stub$Proxy.setBluetoothTethering(IBluetoothPan.java:175)
    17. 04-19 09:36:43.613 17919-17919/de.strait.bluetoothtethering W/System.err: at android.bluetooth.BluetoothPan.setBluetoothTethering(BluetoothPan.java:348)
    18. 04-19 09:36:43.615 17919-17919/de.strait.bluetoothtethering W/System.err: ... 11 more
    19. 04-19 09:36:50.863 17919-17919/de.strait.bluetoothtethering I/Choreographer: Skipped 1382 frames! The application may be doing too much work on its main thread.
    Alles anzeigen

    Quellcode

    1. <uses-permission-sdk-23 android:name="android.permission.WRITE_SETTINGS" />
    2. oder
    3. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    5. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    6. <uses-permission android:name="android.permission.WAKE_LOCK" />
    7. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    8. <uses-permission android:name="android.permission.BLUETOOTH" />
    9. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    10. <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    11. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    12. <uses-permission android:name="android:permission.WRITE_SETTINGS_PERMISSIONS" />
    13. <uses-permission android:name="android:permission.SYSTEM_ALERT_WINDOW" />
    14. <uses-permission android:name="android.permission.INTERNET"/>
    Alles anzeigen
  • Hallo jogimuc

    doch das Tethering funktioniert schon. Wie gesagt ich kann es ja per Software ein und ausschalten.
    Und ich sehe den Status auch wenn ich es in einer
    externen BTPanServiceListenerCheck Class abfrage. Siehe ganz oben. Der Value nowVal zeigt mir immer genau den Tethering status beim Start der App an. (das funktioniert bei allen Handys)
    Das ist ja das verrückte.
    Ich hätte es ja dann so gemacht (auch wenn das vielleicht mehr ein Workaround ist), aber ich weis jetzt hier ehrlich gesagt nicht so recht wie ich den nowVal Wert in die MainActivity Class bekommen.
    Natürlich wäre es mir lieber das wirkliche "Problem" zu finden. !!!!!
    Die "State" variable spielt eigentlich keine Rolle die ist nur eine Leiche von vorherigen Tests.
    Ich gebe nicht auf :S :huh:

    Gruß
  • Hallo ich wurde sagen du zeigst noch mal deinen jetzigen Code.
    Das einzige was du austauschen oder auf was du aus der Main zugreifen kannst ist deine static Variable. Nur würde ich das anders machen und zwar würde ich die in der Main erstellen und in derBTPanServiceListenerCheck Class darauf zugreifen.
    Ein Feedback auf Tipps ist auch schön. :P
  • Danke jogimuc

    ich hab warscheinlich jetzt das Problem gefunden
    Wenn ich den unteren Code mit einbaue kommt ein Fenster wo ich Rechte für die App frei geben kann.
    Wenn ich dies dann bestätige funktioniert es.
    Ich hab allerdings noch nicht gefunden wie ich auf diese Einstellung ohne die App zugreifen kann.
    Hab schon alles in den Handy Einstellungen durchsucht.
    Krieg ich aber auch noch raus.
    Hoffentlich kommt jetzt nicht noch ein anderes Problem.

    Ich werde auch nochmal deinen Vorschlag ausprobieren.

    Man darf einfach nur nicht aufgeben. Das hat mich wirklich viele viele Stunden gekostet :sleeping:

    Danke für eure Geduld und Hilfe :P

    Quellcode

    1. boolean settingsCanWrite = Settings.System.canWrite(this);
    2. if (!settingsCanWrite) {
    3. Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
    4. startActivity(intent);
    5. }
  • Hier der code von Xscreen mit deinem verändert.
    ist zwar eine innere Klasse solte aber auch als eikne klasse gehen.

    Quellcode

    1. public class MainActivity extends AppCompatActivity {
    2. Button toggleBTButton;
    3. BTPanServiceListener bt;
    4. Object instance = null;
    5. Method setTetheringOn = null;
    6. Method isTetheringOn = null;
    7. Object mutex = new Object();
    8. @Override
    9. protected void onCreate(Bundle savedInstanceState) {
    10. super.onCreate(savedInstanceState);
    11. setContentView(R.layout.activity_main);
    12. toggleBTButton = findViewById(R.id.toggleBTButton);
    13. // Setup Methods
    14. try {
    15. Class<?> classBluetoothPan = Class.forName("android.bluetooth.BluetoothPan");
    16. Constructor<?> ctor = classBluetoothPan.getDeclaredConstructor(Context.class, BluetoothProfile.ServiceListener.class);
    17. ctor.setAccessible(true);
    18. Class[] paramSet = new Class[1];
    19. paramSet[0] = boolean.class;
    20. synchronized (mutex) {
    21. setTetheringOn = classBluetoothPan.getDeclaredMethod("setBluetoothTethering", paramSet);
    22. bt= new BTPanServiceListener(getApplicationContext());
    23. isTetheringOn = classBluetoothPan.getDeclaredMethod("isTetheringOn", null);
    24. instance = ctor.newInstance(getApplicationContext(), bt);
    25. }
    26. } catch (ClassNotFoundException ex) {
    27. Log.i("MainActivity", "Android-Version not supported!");
    28. ex.printStackTrace();
    29. } catch (Exception ex) {
    30. ex.printStackTrace();
    31. }
    32. toggleBTButton.setOnClickListener(new View.OnClickListener() {
    33. @Override
    34. public void onClick(View v) {
    35. try {
    36. //Check if BT-Tethering is on
    37. if ((Boolean) isTetheringOn.invoke(instance, null)) {
    38. Log.i("MainActivity", "Turn Tethering off");
    39. setTetheringOn.invoke(instance, false);
    40. toggleBTButton.setText("Turn on");
    41. Toast.makeText(getApplicationContext(), "" + bt.nowVal, Toast.LENGTH_SHORT).show();
    42. } else {
    43. Log.i("MainActivity", "Turn Tethering on");
    44. setTetheringOn.invoke(instance, true);
    45. toggleBTButton.setText("Turn off");
    46. Toast.makeText(getApplicationContext(), "" + bt.nowVal, Toast.LENGTH_SHORT).show();
    47. }
    48. } catch (Exception ex) {
    49. ex.printStackTrace();
    50. }
    51. }
    52. });
    53. }
    54. public class BTPanServiceListener implements BluetoothProfile.ServiceListener {
    55. private final Context context;
    56. boolean nowVal;
    57. public BTPanServiceListener(final Context context) {
    58. this.context = context;
    59. }
    60. @Override
    61. public void onServiceConnected(final int profile, final BluetoothProfile proxy) {
    62. //Some code must be here or the compiler will optimize away this callback.
    63. Log.i("MyApp", "BTPan proxy connected");
    64. try {
    65. //boolean nowVal = ((Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0])).booleanValue();
    66. nowVal = (Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0]);
    67. Toast.makeText(context, "nowVal = " + nowVal, Toast.LENGTH_SHORT).show();
    68. if (nowVal) {
    69. // proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.FALSE);
    70. // proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.FALSE);
    71. // Toast.makeText(context, "onServiceConnected: Turning bluetooth tethering off", Toast.LENGTH_SHORT).show();
    72. toggleBTButton.setText("Turn on");
    73. } else {
    74. // proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, true);
    75. //proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, new Object[]{Boolean.valueOf(true)});
    76. //proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, Boolean.TRUE);
    77. // Toast.makeText(context, "onServiceConnected: Turning bluetooth tethering on", Toast.LENGTH_SHORT).show();
    78. toggleBTButton.setText("Turn off");
    79. }
    80. } catch (IllegalAccessException e) {
    81. // TODO Auto-generated catch block
    82. e.printStackTrace();
    83. } catch (IllegalArgumentException e) {
    84. // TODO Auto-generated catch block
    85. e.printStackTrace();
    86. } catch (InvocationTargetException e) {
    87. // TODO Auto-generated catch block
    88. e.printStackTrace();
    89. } catch (NoSuchMethodException e) {
    90. // TODO Auto-generated catch block
    91. e.printStackTrace();
    92. }
    93. try {
    94. //Set Button Text
    95. if ((Boolean) isTetheringOn.invoke(instance, null)) {
    96. toggleBTButton.setText("Turn off");
    97. } else {
    98. toggleBTButton.setText("Turn on");
    99. }
    100. } catch (Exception ex) {
    101. ex.printStackTrace();
    102. }
    103. }
    104. @Override
    105. public void onServiceDisconnected(final int profile) {
    106. }
    107. }
    108. }
    Alles anzeigen


    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="de.strait.bluetoothtethering">
    4. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    5. <uses-permission android:name="android.permission.BLUETOOTH" />
    6. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    7. <application
    8. android:allowBackup="true"
    9. android:icon="@mipmap/ic_launcher"
    10. android:label="@string/app_name"
    11. android:roundIcon="@mipmap/ic_launcher_round"
    12. android:supportsRtl="true"
    13. android:theme="@style/AppTheme">
    14. <activity android:name=".MainActivity">
    15. <intent-filter>
    16. <action android:name="android.intent.action.MAIN" />
    17. <category android:name="android.intent.category.LAUNCHER" />
    18. </intent-filter>
    19. </activity>
    20. </application>
    21. </manifest>
    Alles anzeigen


    Quellcode

    1. apply plugin: 'com.android.application'
    2. android {
    3. compileSdkVersion 28
    4. defaultConfig {
    5. applicationId "de.strait.bluetoothtethering"
    6. minSdkVersion 22
    7. targetSdkVersion 28
    8. versionCode 1
    9. versionName "1.0"
    10. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    11. }
    12. buildTypes {
    13. release {
    14. minifyEnabled false
    15. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    16. }
    17. }
    18. }
    19. dependencies {
    20. implementation fileTree(dir: 'libs', include: ['*.jar'])
    21. implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
    22. //implementation 'com.android.support:appcompat-v7:28.0.0'
    23. implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    24. testImplementation 'junit:junit:4.12'
    25. androidTestImplementation 'androidx.test:runner:1.2.0-alpha03'
    26. androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha03'
    27. androidTestImplementation 'com.android.support.test:runner:1.0.2'
    28. androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    29. implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    30. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P
  • Also das liegt scheinbar an meinem Handy
    Hab jetzt auch gefunden wo die Einstellung dafür ist.
    Einstellungen öffnen / Apps / oben rechst die 3 Punkte "..." / Apps Konfigurieren / Systemeinstellung ändern / Die gewünschte App anklicken (in unserem Beispiel BlueToothTethering) / Editieren der Systemeinstellungen erlauben > ON.

    Das ist bei meinem Handy scheinbar immer automatisch auf OFF. Bei den anderen Handys und bei dir wahrscheinlich grundsätzlich auf ON.
    Vielleicht ist der Grund dafür auch die Software "Norton Mobile Security".

    Gruß
  • bei Android 8 App anklicken / App Info / Systemeinstellungen ändern
    Komisch ist nur, dass bei dem LG Handy das auch auf OFF steht und trotzdem funktioniert.

    Also das verwirrt mich jetzt immer mehr.
    Und an Norton kann es doch nicht liegen, da es dort auch installiert ist.

    Das blöde ist nur, dass man praktisch hier nicht sicher sein kann ob eine solche App bei allen Handys funktioniert.
  • Ich würde einfach mal Tippen, dass das LG G4 ROM einfach restriktiver mit solchen System-Einstellungen umgeht, als die Standard-Android Versionen.

    Ja bei Android hast du natürlich extrem viele Kombinationen aus Hardware und Software, welche das testen im Gegensatz z.B. unter iOS schwerer macht.
    Deswegen würde ich auch vor dem Veröffentlichen der App, soviele Kombinationen testen die gehen und auch Crashlytics in die App einbauen.
    Damit siehst du später ob noch Crashes auftauchen und kannst sie dann entsprechend beheben.

    Von Anti-Viren Software unter Android halte ich sowieso nichts. Die können ohnen Root-Rechte nämlich garnicht wirklich was scannen oder auslesen und entsprechend was finden.