Beiträge von schirmo

    Hallo zusammen,


    kann ich den Lautstärkepegel um das Handy herum messen?


    Hintergrund ist, dass ich keine Spracheingabe bereitstellen möchte, wenn es zu laut ist. Die funktioniert dann nämlich eh nicht.


    Wäre cool wenn da jemand was wüsste ...

    Hi Leute,


    ich kann in meinem SDK Manager APIs < 15 nicht mehr zum Entwicklen installieren.
    "Windows is not supported" oder so lautet die Meldung.


    Möchte Google die alten Phones rausschmeißen?


    Ich habe generell damit kein Problem, da ja 99% alles Geräte abgedeckt sind.
    Allerdings haben meine wichtigsten Tester nur alte Handys (2.3.6 teilweise),
    und meine App brauch keine besonderen neuen Technologien.


    Würde daher gerne die alten Versionen mit anbieten.
    Kann ich das, soll ich das? Was ist eure Meinung dazu?

    Das könnte tatsächlich sein. Ich habe noch ein anfängliches Hauptactivity, von dem ich zwar die Java-datei nutze, aber nicht mehr die .xml GUI dazu.


    Tatsächlich ist die content_mainactivity.xml noch da. Ich habe sie rot eingefärbt und ein Element eingefügt. Warum ersetzt mir denn

    Code
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.content_frame, f).commit();


    nicht wie erwartet einfach mein Framelayout?
    Ich sehe beides, das neue Fragment mit dem ListView und das alte rote. Alles überlagert.


    Also es gibt diese beiden Situationen:


    1. App ist geschlossen und empfängt KEINE GCM-Nachricht. Der Listenadapter bleibt unangetastet.
    -> App öffnen: Listeneinträge OK und schwarz


    2. App ist geschlosse und empfängt eine GCM-Nachricht, sodass ein Element dem Listenadapter hinzugefügt wird.
    -> App öffnen: Listeneinträge zwar vollständig vorhanden, aber weiß

    Tatsächlich weiß auf weißem Hintergrund. Man kann sie ganz leicht sehen und auch anklicken.


    Vielleicht hat es was damit zu tun, dass ich den App Theme auf Light umgestellt habe.


    Hat es was mit dem Thread zu tun, der das Fragment mit dem Listview erstellt?


    EDIT: Wenn ich beim Listview die Schriftfarbe explizit auf schwarz setze, dann wird sie vielleicht nicht mehr überschrieben. Sollte ich testen sobald ich wieder kann.

    Manchmal sind meine Listview-Einträge weiß und kaum lesbar.


    Es tritt immer dann reproduzierbar auf, wenn meine App im geschlossenen Zustand Hintergrundinformationen über GCM empfängt.
    Ein darauf folgendes Öffnen der App zeigt dann nur weiße Einträge.


    Woran liegt das?

    Hi :D


    Also: Dein Button und dein Bild erscheinen nicht mehr, sobald du es in die eigene Klasse auslagerst, richtig?
    Also falls das der Fall ist: Du fügst die graphischen Objekte mit this.addView hinzu.
    Das klappt in deinem Hauptactivity gut, weil dort innen drin "this" auch dem Hauptactivity entspricht.


    Bist du jetzt aber in einer eigenen Klasse, dann ist "this" diese Klasse.
    Du fügst es also nicht im Hauptactivity hinzu, sondern in deiner nebenläufigen Klasse.
    Stattdessen kannst du deiner Klasse eine Referenz auf das Hauptactivity hinzufügen (übergibst du eh schon im Konstruktor an die Variable c).
    Statt "this".add machst du dann "referenzAufHauptActivity".add


    Konkret:
    Ersetze:

    Code
    this.addView(text_bnt);


    durch:

    Code
    c.addView(text_bnt);


    (Bei this.addView(myImageView); natürlich das gleiche).


    PS: Wo erstellst du eig. dein ViewContainer-Objekt? Rufst du init() auf?

    Puh! Nach tagelangem Rumprobieren und lesen von etlichen Post habe ich es geschafft:


    1) .crt-Datei in einen neuen Keystore:


    - Mithilfe des Java-Tools "portecle-1.9" neuen Keystore BKS anlegen, .crt-Datei einfügen, speichern unter .bks
    2)
    In Android:
    Ordner erstellen: <Javaapp>\src\main\res\raw
    Dort die .bks-Datei einfügen.


    Somit hat man endlich eine eigene SSLSocketFactory, die nur dem eigenen selbst signierten Zertifikat vertraut.


    3) Anwendung:



    Java
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    SSLSocketFactory sf = getSocketFactory(ctx);
    
    
    if(sf != null){
        conn.setSSLSocketFactory(sf);
        ...
        conn.close();
    }

    Viel Erfolg!


    EDIT:
    Für ältere Android-Phones muss mit einem anderen Keystore gearbeitet werden. Ansonsten erhält man die Meldung:
    Wrong version of Keystore
    Ihr solltet euren Keystore also zusätzlich als BKS-v1 exportieren und in den raw-ordner hinzufügen.



    Im Code fügt ihr dann eine Weiche ein, die den jeweils richtigen Keystore auswählt:


    Java
    int bks_version;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        bks_version = R.raw.bksdateiname; //The BKS file
    } else {
        bks_version = R.raw.bksdateiname_v1; //The BKS (v-1) file
    }
    KeyStore ks = KeyStore.getInstance("BKS");
    InputStream in = getResources().openRawResource(bks_version);

    Somit könnt ihr neue und alte Smartphones ideal bedienen.

    Hallo zusammen,


    ich versuche schon seit Stunden, eine HTTPS-Anfrage an meinen eigenen Server zu senden.
    Mein Zertifikat ist selbst erstellt und liegt als .crt-File vor.


    Sämtliche Codes im Internet machen folgendes:


    Java
    HttpsURLConnection.setDefaultSSLSocketFactory(EIGENE_FACTORY);


    Es wird eine eigene SSLSocketFactory erstellt, die aus den Android-Ressourcen das .crt bzw. .bks-File ließt und nur dem eigenen Zertifikat vertraut.
    Allerdings sind alle Codes zum erstellen der eigenen Factory veraltet, und ich habe sie nicht integrieren können.


    Bin schon fast verzweifelt. Wie kann ich meine eigene SSLSocketFactory instanzieren, die nur meine eigenen Zertifikat traut?


    Wie mache ich das: meinZertifikat.crt -> new SSLSocketFactory() ?


    Viele Dank!

    Hallo zusammen,


    welche Möglichkeiten habe ich, einen Code genau dann im Hintergrund auszuführen, sobald eine Internetverbindung besteht?
    Verlgeichbar mit dem Absenden einer Nachricht von Whatsapp: Habe ich keine Internetverbindung, kommt erst die Uhr - besteht die Verbindung irgendwann, wird die Nachricht automatisch im Hintergrund abgesendet.


    Momentan gehe ich so vor:
    1. Internet verfügbar: Gleich synchronisieren
    2. Kein Internet: Thread im Hintergrund mit sleeps so lange laufen lassen, bis Internet verfügbar ist (Pfusch in meinen Augen)


    Besonders problematisch ist bei meinem Ansatz, dass ich den Thread von unterschiedlcihen Stellen aus starte (z.B. auch bei einer empfangenen GCM-Nachricht).
    Ich weiß dann nicht, ob der Thread bereits läuft. Dazu habe ich dann eine Shared-Preferences-Variable mit der Uhrzeit der letten Synchronisierung.


    Alles so zusammengebastelt. Gibt es da eine bessere Möglichket?


    Vielen Dank! :)