Beiträge von Marco Feltmann

    Die Stunde sieht korrekt aus. Du definierst mit 'hh' ja die Stunden 1-12 vormittags/nachmittags.
    Für 0:00 Uhr bräuchtest Du 'HH', für 24:00 Uhr die 'kk''…


    Warum Dir die 8 Minuten fehlen verstehe ich ehrlich gesagt nicht und ich vermute einen Tippfehler Deinerseits.
    (Egal welche dusselige Zeitzone eingestellt ist, keine unterscheidet sich durch ein paar Minütchen von einer anderen Zeitzone.)


    Im Übrigen kannst Du mit dem Modifier 'ZZZZ' die Zeitzone prüfen.


    Eventuell wäre für Deinen Anwendungsfall auch DateFormat.getTimeInstance() hilfreich – außer, du willst die Sekunden tatsächlich und aus gutem Grund nicht haben.

    Also in dem Fall könntest Du dann höchstens das Projekt bei GitHub (o.Ä.) hoch laden.
    Wobei 10.000 Zeilen schon derbe viel sind. Zu viel, wenn Du mich fragst…


    Versuch mal ein Testprojekt zu erstellen, das auf die elementaren Dinge gekürzt ist.
    Also erste Activity laden, zweite Activity aufrufen, Logausgaben zur Nachverfolgung der Cycles.


    Ist Dir das nicht möglich, liegt Dein Problem irgendwo in den Tiefen Deines Codes.
    (Insofern wäre ein erstes Effizienter Schreiben eine gute Möglichkeit zur Schadensbegrenzung.)

    Also meine Meinung zum Thema:
    Je sicherer Du es machen möchtest, desto mehr personenbezogene Daten benötigst Du dafür.
    Je mehr personenebezogene Daten ein Dienst von mir will, desto größer meine Abneigung diesen zu nutzen.


    Meine Personalausweisnummer kennen ich, mein Personalausweis und die Behörden. Sie geht auch keinen Anderen irgendwas an.
    Ich allein habe drei Kreditkarten. Eine Erschwerung einer Neuanmeldung bzw. weiteren Anmeldung ist da nicht gegeben.
    Zwangsregistrierungen bei einem Drittanbieter sind ein totales No-Go.
    Ebenso verhält es sich mit E-Mail + SMS Bestätigungscode, wobei das derart verbreitet ist, dass man da am wenigsten Widerstand zu befürchten hat. Nur habe ich keine Ahnung welche Hardware von Nöten ist um mal eben SMS Bestätigungscodes zu versenden und den Server davon in Kenntnis zu setzen.


    Aber auch hier habe ich Zugriff auf zwei Mobilfunknummern (privat + geschäftlich) sowie etliche Mailadressen. (Privat, Geschäftlich, GMail)
    Eine Neu–/Mehrfachanmeldung kann also auch dadurch nicht ausgeschlossen werden.


    Auch ist es nicht möglich, mit Benutzer- und Geräte-IDs zu hantieren, da diese von den Systemen nicht mehr zur Verfügung gestellt werden – einfach weil sie nie eindeutig waren. Und die App–Vendor–IDs werden bei jeder Neuinstallation neu verteilt.


    Oh, und wenn wir gerade dabei sind: Biometrische Daten. Vergiss sie.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Es ist also im Großen und Ganzen unmöglich dafür zu sorgen, dass sich eine Person nur einmal anmelden kann und dass auch nur sie sich anmeldet.


    Insofern würde ich die Sache zu einem PAL (Problem Anderer Leute) machen:
    OAuth Anbindung.
    So kannst Du zumindest sicher sein, dass ein Nutzer ganz sicher zu einem bestimmten Facebook/Google+/Twitter/… Account gehört.
    Du kannst immer noch nicht eingrenzen, ob eine juristische Person mit 17 Accounts angemeldet ist oder ob ein Account von 17 Personen genutzt wird. Das liegt dann aber auch nicht mehr in Deiner Verantwortung.

    1) MODE_PRIVATE gehört zur Context Klasse. Indem Du von Activity erbst, kannst Du direkt auf diese statische Variable zugreifen. Musst Du aber nicht, wenn Du statt dessen Context.MODE_PRIVATE nutzt.
    openOrCreateDatabase(String, int, object) gehört ebenfalls zum Context.


    2) Keine Ahnung. Instanziiert haben musst Du das Objekt und die Referenz auf die Cursor.Factory ist optional. Da müsstest Du Dich mit dem Debugger durchhangeln.
    Oder dieses Tutorial von Lars Vogel durcharbeiten und es mit einem SQLiteOpenHelper richtig machen. ;)

    So ganz rudimentär tut die App bereits was.
    Zwar aktuell nur Symbol und SSID anzeigen, aber immerhin. ;)


    Ich war so frei, das Ganze etwas anzupassen:

    • ein Icon als Offline Icon umgewandelt
    • bei SSID 'Freifunk' das Icon mit 'freies WLAN' anzeigen
    • bei anderer SSID das normale Icon ohne Text anzeigen
    • wenn Offline Offline-Icon anzeigen


    Sofern Du mal testen möchtest, weißt Du ja, wo die Sourcen liegen.


    Der Notification Krams und die Settings existieren noch genauso wenig wie das Widget oder die Watch-Anbindung, aber ich habe ja auch erst ca. 5 Stunden investiert. :)


    Mal sehen, ob ich heute den Umbau auf die Notifications integriert bekomme.

    Bist Du Dir sicher, dass das nicht funktioniert?


    Im Allgemeinen bekommt Deine App nichts von einem Neustart mit, sofern sie nicht mindestens einmal manuell gestartet wurde.
    Hast Du das bei Deinen Tests berücksichtigt?

    Ach, verdammt. Verwechselt. Häng grad zu tief in iOS drin… :(


    Folgender Ansatz:

    Java: MainActivity.java
    […]
    public static Activity handleToClose = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
      […]
      handleToClose = this;
    }


    Java: InfoActivity.java
    […]
    @Override
    public void onClick(View v) {
      […]
      MainActivity.handleToClose.finish();
    }

    Möglichkeit 1:
    Du änderst den Workflow. Umentscheiden is nich drin, wer sich mit einer anderen Maschine verbinden will, wird von der aktuellen Maschine abgemeldet.
    Wenn dies ein definiertes Verhalten ist, kommt der Nutzer damit klar. (Er wird sich stumpf daran gewöhnen, dass die App auf den 'Zurück' Button mit Beenden reagiert.)


    Möglichkeit 2:
    Activity Login hat eine Instanzvariable/Member, beispielsweise private MainActivity callingActivity = null; mit dazugehörigem Setter.
    Beim ersten Start der App ist diese Variable null, bei jedem weiteren Erzeugen der LoginActivity setzt Du diese Variable auf den Wert der aktuellen MainActivity.


    Dann kannst Du im onClickListener() des Login Buttons Deiner LoginActivity die aufrufende MainActivity sauber beenden:

    Java
    […]
    if( callingActivity != null ) {
      callingActivity.finish();
    }
    […]


    (Oder erst in der Methode, die anzeigt, dass die Verbindung möglich ist.)

    Ich fürchte, das ist definiertes Verhalten.


    Mir fallen da spontan drei Möglichkeiten ein:


    • lass die ActionBar sichtbar, so viel Platz nimmt die ja nicht weg.
    • zeige das OptionsMenu nur, wenn die ActionBar sichtbar ist (der NavigationDrawer aufgeklappt ist)
      Du kannst ja onMenuButtonPressed() (oder wie das noch mal hieß) mit implementieren, damit man da auch so drauf zu greifen kann.
    • lass die ActionBar komplett weg und überlege Dir eine bessere Möglichkeit zur Anzeige des NavigationDrawer.
      Du brauchst davon vermutlich nur das App Icon für das NavigationDrawer show()/hide() Event. Eventuell lässt sich das auf so einen Floating Button (wie der Stift in der Gmail App) realisieren.

    Das solltest Du alles dem Backstack des FragmentManagers überlassen.


    Heißt:
    jede FragmentTransaction (die Du da drin haben möchtest) ein beherztes addToBackStack().


    Bei jedem Touch auf den Back Button schaust Du dann via FragmentManager.getBackStackEntryCount(), ob es da noch einen Eintrag gibt.


    Falls ja: ein beherztes FragmentManager.popBackStack() (oder Konsorten)


    Falls nein: raus aus der App.


    Du kannst hier frei entscheiden, ob Du wirklich jeden Pups zurückverfolgen willst, oder immer nur, wenn sich durch eine bestimme Hierarchie gehangelt wurde.

    Kannst du deine Aussage noch ein wenig mehr erläutern mit ggf. einem Lösungsansatz?


    Naja, eigentlich ist damit alles gesagt. :)
    Du machst die Zuweisung zu früh, was zu einer NullPointerException und damit zum Absturz führt.


    Klar könnte ich Dir jetzt sagen, dass Du an besagter Stelle 'test' noch nicht setzt, sondern die Zuweisung erst in der onCreate() machst.
    Allerdings hast Du mehr davon, das selbst heraus zu finden. ;)