Beiträge von Xcreen
-
-
Hi herrm_no,
ich habe mir das mal angeschaut und was gefunden, was ziemlich gut funktioniert. (getestet auf S8 mit Android 9)
Leider gibt es keine offizielle API, sondern muss sich die Methoden selber besorgen. Daher kann ich dir nicht sagen für welche Android-Version das ganze funktioniert.
Wichtig: Bluetooth muss an sein! Das kannst du ja selber noch prüfen, habe ich jetzt bei dem Beispiel außen vorgelassen.Android-Manifest:
XML<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
MainActivity:
Java
Alles anzeigenpublic class MainActivity extends AppCompatActivity { Button toggleBTButton; Object instance = null; Method setTetheringOn = null; Method isTetheringOn = null; Object mutex = new Object(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toggleBTButton = findViewById(R.id.toggleBTButton); // Setup Methods try { Class<?> classBluetoothPan = Class.forName("android.bluetooth.BluetoothPan"); Constructor<?> ctor = classBluetoothPan.getDeclaredConstructor(Context.class, BluetoothProfile.ServiceListener.class); ctor.setAccessible(true); Class[] paramSet = new Class[1]; paramSet[0] = boolean.class; synchronized (mutex) { setTetheringOn = classBluetoothPan.getDeclaredMethod("setBluetoothTethering", paramSet); isTetheringOn = classBluetoothPan.getDeclaredMethod("isTetheringOn", null); instance = ctor.newInstance(getApplicationContext(), new BTPanServiceListener()); } } catch (ClassNotFoundException ex) { Log.i("MainActivity", "Android-Version not supported!"); ex.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } toggleBTButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { //Check if BT-Tethering is on if((Boolean)isTetheringOn.invoke(instance, null)) { Log.i("MainActivity", "Turn Tethering off"); setTetheringOn.invoke(instance, false); toggleBTButton.setText("Turn on"); } else { Log.i("MainActivity", "Turn Tethering on"); setTetheringOn.invoke(instance, true); toggleBTButton.setText("Turn off"); } } catch (Exception ex){ ex.printStackTrace(); } } }); } public class BTPanServiceListener implements BluetoothProfile.ServiceListener { @Override public void onServiceConnected(final int profile, final BluetoothProfile proxy) { try { //Set Button Text if ((Boolean) isTetheringOn.invoke(instance, null)) { toggleBTButton.setText("Turn off"); } else { toggleBTButton.setText("Turn on"); } } catch (Exception ex){ex.printStackTrace();} } @Override public void onServiceDisconnected(final int profile) { } } }
Layout:
XML
Alles anzeigen<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/toggleBTButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:text="Turn On" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
-
In der Rar-Datei hast du eine native App (also wird auch nicht auf iOS funktionieren).
Dort kannst du aufjeden Fall via den Navigation Drawer mithilfe der Anleitung einbauen:
https://developer.android.com/…ing-navigation/nav-drawer
Java/Android Grundwissen ist natürlich schon erforderlich. Wenn es zu schwer für dich ist, musst du dich erstmal general mit Android Entwicklung beschäftigen... -
Soweit ich verstanden habe, gibt es die CustomTabs zwar ab Android 4.1. Allerdings wird der Chrome geöffnet, wenn die System Webview älter als Version 45 ist. (Bin mir nicht genau sicher, aber es kann so sein).
Alternativ hast du noch einen Fehler in deinem Code, aber dafür müsstes du uns einmal deinen Code-Teil zeigen. -
Was genau hast du denn jetzt vor?
Eine Android/iOS Webapp wird ganz anders programmiert als eine Native App.
In deinem Beispiel: https://developer.android.com/…ing-navigation/nav-drawer wird der Navigation Drawer nativ erstellt.
In deinem anderen Beispiel: https://gonative.io/share/opkrbk ist eine Webapp aber mit nativen Komponenten (Hybrid-App).Was genau möchtest du denn jetzt? Ein native Android-App oder eine Webapp/Hybrid-App?
Bei einer Webapp brauchst du ein entsprechened Framework z.B. dein https://gonative.io/ oder https://cordova.apache.org/Aber bevor wir die helfen können, brauchen wir aufjeden Fall Infos womit du gerade arbeitest und was du vorhast.
-
Der Chrome nutzt intern keinen Webview und wird wahrscheinlich noch über den Play-Store geupdatet. (Sprich ist im Gegensatz zu dem Webview auf einen aktuellen Stand)
Unter neuen Geräten dient der Chrome als Webview (kann man in den Entwicker-Einstellungen einstellen), bei Google Freien Geräten wird der System Webview genutzt (der intern einen Chromium hat).
Der System-Webview wird erst ab Android 5 geupdatet und ist vorher fest drin.CustomTabs sollten eigentlich funktionieren ab Android 4.1 ...
-
Nein das hat nichts mit der Browser App zutun.
Es geht um den System-Webview (dafür muss du in den Optionen den "Systemanwendungen anzeigen") anklicken.
Ich sehe aber gerade das die Webviews bei APKMirror Android 5 brauchen. Keine Ahnung, ob man den Webview bei Android 4 noch nicht updaten kann.
Scheint mir einfach so, das Android 4 die neuen Zertifikate nicht verarbeitet bekommt. Ohne das man den Webview in Android 4 updaten kann, wird es wohl schlicht nicht funktionieren.Ja lässt sich leider erst ab Android 5 updaten: https://android.stackexchange.…ystem-component-on-kitkat
Also ist das Gerät wahrscheinlich schlicht zu alt. -
Es sieht so aus als supported dein Android Webview kein SHA2 Zertifikat.
Auch wenn es bei Digicert anders steht, haben wohl mehrere das Problem.
Welche Webview-Version ist installiert? Eventuell kannst du von Hand updaten? (Die passende APK gibts bei apkmirror)
Probier mal deinen Webview mit folgender Seite: https://sha2test.force.com/s/Android 4.2.2 ist vom Februar 2013 entsprechend schon 6 Jahre alt. Das heißt, das auch die internen CA´s nicht unbedingt auf den aktuellen Stand ist.
Falls du es via ein Webview-Update nicht beheben kannst, liegt es wahrscheinlich schlicht daran, dass die Android-Version einfach zu alt ist und das SSL-Zertifikat nicht entsprechend verarbeiten kann.Was für einen Error-Code/Description bekommst du denn noch bei deinem onReceivedError() ?
-
Hi,
du kannst SSL-Fehler umgehen via:Javawebview.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ handler.proceed(); } });
Dies funktioniert aber nicht unbedingt bei allein Seiten und ist auch nicht sicher.
Um welche Seite geht es denn? Eventuell hat ist das SSL-Zertifakt zu alt/neu. -
Also es wäre mir neu das man über Android Studio ein Image installieren kann.
Zum Image installieren hat jeder Hersteller meistens ein eigenes Tool passend zum Prozessor und Chipsatz. Diese Tools geben die Hersteller meistens aber nicht raus.
Wie wurde das "falsche Update" denn installiert?Edit: Hier gibt es eine Anleitung für dein Handy: http://bbs.blackview.hk/viewtopic.php?f=144&t=54240
Dort wird als Tool SP Flash Tool eingesetzt. -
Wahrscheinlich fehlt google() in deiner build.gradle datei:
Der Anfang sollte so aussehen:Code
Alles anzeigenbuildscript { repositories { jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:3.3.2' //classpath 'com.google.gms:google-services:3.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
-
Wie hast du die App neu compiliert?
Wahrscheinlich wird die App Klassen nutzen, die du unter Android 4 einfach nicht hast und deshalb bekommst du den Fehler. (z.B. Material Design ?) -
android.enableJetifier=true versucht alle Third-Party Librarys zu AndroidX zu konvertieren.
Hast du mal es mal versucht mit: android.enableJetifier=false
Falls das klappt, liegt es an irgendeiner Third-Party Library die du eingebunden hast und noch nicht passend läuft.
Ich würde mal deine Third-Party Librarys durch gehen und bei https://mvnrepository.com/ schauen, welche Dependencies diese haben.
Ggfs. solltest du mal überprüfen, ob du die Librarys durch neuere Versionen ersetzen kannst (eventuell ist das Problem dadurch ja schon behoben). -
Laut Logcat ist dein Hauptfehler das du einen Netzwerk-Zugriff aus dem Main-Thread startest.
Unter Java direkt verursacht das nicht direkt einen Fehler wie unter Android, führt allerdings trotzdem dazu, das z.B. die GUI/Swing etc. einfriert.
Deswegen musst du das ganze unter Android in einen neuen Thread starten. -
Hi,
was genau bekommst du den für eine Fehlermeldung im Logcat? Dort sollte eigentlich dann etwas stehen. (Eventuell auch alle Exceptions abfangen und nicht nur die IOException )
Ich sehe du benutzt: org.apache.commons.net.ftp.FTP. Hast du die Library passend im Gradle eingefügt? -
Facebook hat eine SDK für sowas. Schaue mal auf https://developers.facebook.com
Dort muss du eine App einrichten und diese zur Datenübermittlung nutzen.
Allerdings brauchst du natürlich die entsprechenden Nutzer-Berechtigungen.Am besten einfach mal durch die Doku klicken.
-
Ich glaube du darfst dein Javascript nicht via loadUrl ausführen.
Probier mal die funktion evaluateJavascript. https://developer.android.com/…ack%3Cjava.lang.String%3E)Ansonsten würde ich sagen, du hast einen Fehler im JS-Code. Ist getAktVol in der Seite den definiert?
-
Hi Ebi,
falls du via mCurrentUser = FirebaseAuth.getInstance().getCurrentUser(); keinen Nutzer bekommst (null) existiert die Methode getUid() auf dem Objekt natürlich nicht.Du müsstes einfach prüfen, ob getCurrentUser null zurückliefert (dann hast du keinen gültig eingeloggten Nutzer).
-
Habe dein Code nur mal schnell überflogen und frage mich auch wie jogimuc, warum du Arrays statt normalen Variablen nutzt?
Wie auch schon von jugimuc gesagt, müssen Double-Wert ein Punkt statt Komma haben.
JavaString test1 = "1,5"; String test2 = "1.5"; double parseTest1 = Double.parseDouble(test1); // FEHLER ! double parseTest2 = Double.parseDouble(test2); // 1,5
Heißt du muss das Komma durch einen Punkt ersetzt, bevor du in ein double parst.
Und bei der String-Ausgabe kannst du das wieder umdrehen -> Punkt durch Komma ersetzten.
Um das ganze passend zu ersetzen kannst du auf den String die replace-methode nutzen. -
Hi, es gibt eine Funktion die nennt sich evaluateJavascript.
Das ganze sieht dann in etwas so aus: webView.evaluateJavascript("document.getElementById('main-carousel2').style.display='none';",null);Achtung: du hast auch noch einen JS-Fehler: document.getElementsById('main-carousel2').style.display='none';} -> muss zu -> document.getElementById('main-carousel2').style.display='none';