Beiträge von redneb

    Hallo,


    ich habe meine erste App so gut wie fertig und möchte diese bald im Store veröffentlichen.
    Wie sieht es mit dem Impressum, Haftungsausschluss, etc. aus? Muss ich ein Gewerbe anmelden?
    Sollte noch etwas beachtet werden?


    Bei meiner App handelt es sich um eine Art Wecker. Was ich natürlich vermeiden will ist,
    dass wenn jemand nicht geweckt wird (nachweislich) und desshalb seinen Bus/Flug etc. verpasst
    und Schadensansprüche stellt. Oder was ich eher für unwahrscheinlich halte, das es zu
    Hardwaredefekten kommt, dies sollte ja von dem OS verhindert werden.


    Vielleicht bin ich an der Stelle auch etwas paranoid...


    Viele Grüße
    redneb

    Hi,


    danke für das Angebot. Bei dem S4 kann ich schon relativ klar sagen, dass es das Problem gibt. Im Debug-Modus scheint das keinen Unterschied zu machen. Ich bin noch nicht dazu gekommen mein neues "Verfahren" zu testen. Ich öffne jetzt via AlarmManager alle 10 Minuten eine Activity mit dem der Bildschirm angeschalten wird. Ich hoffe dadurch das GPS am Leben halten zu können. Sobald ich es testen konnte schreibe ich es hier nochmal.

    Also ganz das Wahre ist es leider nicht mit dem SCREEN_DIM, verhält sich so wie man es vermuten würde. Der Bildschirm bleibt definitiv an, wird jedoch abgedunkelt. Der Sensor scheint nicht abgeschalten zu werden, jedoch geht es heftig auf den Akku.


    Ich werde es jetzt mal mit dem AlarmManager versuchen, indem ich dann alle 5 Minuten einen Broadcast sende. Vielleicht kann ich die Sensoren ja so "wach" halten.


    Hat Jemand vielleicht noch andere Ideen? Diese ganzen Sport Tracking Apps, die die Strecke aufzeichnen, die müssen das ja auch irgendwie hinbekommen haben. Ich habe noch gut zwanzig offene Tabs zu dem Thema die ich noch nicht gelesen habe, jedoch von den bereits gelesenen wiederholen sich die Vorschläge immer und immer wieder.



    Viele Grüße
    redneb

    Kurz: Jep xD rechts oben das grüne Teil mit "Suchbegriffe eingeben" ist nicht zur Deko ...

    Oh man, Danke! So weit oben habe ich gar nicht geschaut :D


    Und nochmals Danke!



    Die Konstante SCREEN_DIM habe ich auch in der Doku gesehen, aber nicht verwendet da diese ab API17 veraltet ist und ich den Beschreibungstext anders interpretiert habe als er wohl gemeint ist. Ich werde diese Konstante mal ausprobieren.

    Hi,


    erste Frage: Gibt es keine Suchfunktion in diesem Forum oder bin ich blind?


    Jetzt zum eigentlichen Problem.


    Ich habe eine Test-App die einen Service aufruft und die Location Änderungen registriert und dann eine Funktion aufruft. Bei dem Aufruf erfolgt dann auch eine Aktualisierung der Notificationbar. Dies funktioniert im Debug-Modus daheim vor dem Rechner auch ganz toll. Ich bekomme in der Notification die aktuelle Position angezeigt. Heute stand eine kleine Dienstreise an und ich wollte die Gelegenheit nutzen die Test-App mal nebenbei laufen zu lassen. Bei den Kontrollen war die Positionsangabe in der Notification auch ok, hatte soweit immer gestimmt (ca. alle 5-10min habe ich das Handy angemacht und geschaut). Dann habe ich das Handy beiseite gelegt und die Zeit verstrich. An meinem Zielort habe ich das Handy wieder angemacht und dann gesehen dass die Position überhaupt nicht stimmte, gute 50km Entfernung lag dazwischen. Einen kurzen Moment später wurde die Position richtig angezeigt.


    Ich vermute die App ist in den DeepSleep verfallen, OBWOHL ich der Meinung war dies zu verhindern.


    In der onCreate des Service mache ich folgendes:


    Java
    try		{			pm = (PowerManager) getSystemService(Context.POWER_SERVICE);			wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "PARTIAL_WAKE_LOCK_for_LocationService");			wakeLock.acquire();		}		catch (Exception e)		{			pm = null;			wakeLock = null;			e.printStackTrace();		}



    und in der onDestroy hebe ich diesen Lock wieder auf. Auch in der AndroidManifest.xml habe ich


    Java
    <uses-permission android:name="android.permission.WAKE_LOCK" />



    stehen.


    In der Doku steht zwar nur etwas von der CPU für PowerManager.PARTIAL_WAKE_LOCK, jedoch gehe ich davon aus dass die ganzen Sensoren auch weiterhin laufen, da es sonst keine passendere Option gibt.


    Hat Jemand eine Idee was ich falsch mache? Oder was ich besser machen könnte?




    Viele Grüße
    redneb

    Hi,


    ich habe es mit dem observer pattern ( http://de.wikipedia.org/wiki/Beobachter_(Entwurfsmuster) ) gemacht, was wunderbar funktioniert.


    Du erstellst dir ein interface für den "observer", z.B.


    Java
    public interface OnHalelujaListener
    {	
    	public void aktualisiere(Typ deineDaten);
    }



    In deiner Klasse ABC die eine private class der AsyncTask hat, fügst du dann folgendes hinzu:


    Java
    private OnHalelujaListener onHalelujaListener = null;
    	public void setOnHalelujaListener(OnHalelujaListener listener){	onHalelujaListener = listener;}



    In der Klasse ABC wird dann der Aufruf für den AsyncTask gemacht. Um dann die Daten weiter geben zu können, gestalltet man die onPostExecute der AsyncTask Klasse wie folgt:


    Java
    @Overrideprotected void onPostExecute(TypA deineDaten){	if (onHalelujaListener != null)	{		onHalelujaListener.aktualisiere(deineDaten);	}}



    Jetzt kann überall dort wo eine Instanz der Klasse ABC erstellt wird, die Daten empfangen wenn man dort den den Handler hinzufügt (in onCreate z.B.):


    Java
    test = new ABC();
    test.setOnHalelujaListener(new OnHalelujaListener(){	@Override	public void aktualisiere(TypA deineDaten)	{			// Mache hier was du damit machen willst	}});



    Das war es dann schon.


    (Mein Quelltext wird leider jedesmal falsch formatiert... drei mal angepasst)


    Viele Grüße
    redneb

    Hi,


    danke für eure Antworten.


    Mittlerweile habe ich eine eigene Klasse geschrieben die je nachdem ob der Google Play Service überhaupt vorhanden ist dann den klassischen Weg verwendet über den LocationManager.



    Mein vorheriges Problem habe ich so gelöst: Wenn sich die Zeiten für den LocationRequest ändern, schließe ich den LocationClient mittels .disconnect(), erstelle einen neuen LocationClient mit den selben Listenern wie vorher, erstelle ein neues LocationRequest Objekt mit den Zeiten die ich benötige. Verbinde den LocationClient mit .connect() und sobald dieser verbunden ist, weise ich den LocationRequest zu. Dann funktioniert es so wie gedacht, nur besonders schön finde ich den Weg nicht. Anders habe ich es einfach nicht hinbekommen. Sobald ich eine Zuweisung an einen LocationClient gemacht habe der noch verbunden war, wurde im 5 Sekunden Takt die Funktion ausgelöst.


    Sorry für die ungenaue Lösungsbeschreibung, bin etwas in Eile und unterwegs. Bei Bedarf kann ich gerne nochmal Beispielcode posten, jedoch doch ist es ja kein Hexenwerk.



    Viele Grüße
    redneb

    Hi,


    ich verwende den LocationClient in einer App. Die Parameter für den LocationRequest setze ich wie auf der Google Developer Seite beschrieben http://developer.android.com/t…tes.html#UpdateParameters


    Soweit funktioniert scheinbar auch alles, die onLocationChanged Funktion wird im 5-Sekunden Takt aufgerufen. Ich möchte jetzt im Nachhinein die Parameter "interval" und "fastestInterval" anpassen. Das mache ich wie folgt:


    Java
    // Funktion die von onLocationChanged aufgerufen wird...
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(30000);locationRequest.setFastestInterval(20000);
    locationClient.requestLocationUpdates(locationRequest, this);



    Leider wird onLocationChanged weiterhin im 5 Sekunden Takt aufgerufen und nicht wie eigentlich erwartet im 20 bzw. 30 Sekunden Takt.


    Was habe ich vergessen oder mache ich falsch? Ich habe das Gefühl der LocationClient missachtet den LocationRequest von Anfang an, denn wenn ich in der onConnected Funktion

    Java
    locationClient.requestLocationUpdates(locationRequest, this);

    raus nehme, wird die Funktion auch im 5 Sekunden Takt aufgerufen.




    Viele Grüße
    redneb

    Ich habe die Lösung gefunden, zu mindestens funktioniert es so. Wen es interessiert...


    In A rufe ich B mit startActivityForResult(..) auf und definiere in A noch den "RequestCode" als static. Wenn in B ein Element aus der Liste ausgewählt wird, erstelle ich das Intent mit dem Ziel von A, setzte es mit setResult(..) und rufe finish() auf (der ResultCode ist durch den Aufruf in A bekannt und wird vom System automatisch im result gesetzt). Die erweiterten Listen (Activity C) rufe ich in B ebenfalls mit startActivityForResult(..) auf und gebe als RequestCode den aus A an. Wenn ich in C zurück gehe, mache ich dies ganz normal über startActivity(..). Wird ein Element ausgewählt, dann erstelle ich das Intent ohne Ziel-Angabe, setzte nur die Extras, rufe setResult(..) und dann finish() auf. Jetzt wird B aufgerufen, was ich eigentlich nicht will, jedoch kommt jetzt der "Trick". In B überschreibe ich ebenfalls onActivityResult(..). Das Ergebnis aus C kommt an, dort überprüfe ich ob es auch den richtigen RequestCode hat. Wenn ja, dann rufe ich einfach mit dem Ergebnis setResult(..) und finisch() auf.


    Die App verhält sich so wie gedacht, der "Stack" ist gelöscht. Mit dem "zurück" Button komme ich, wie gewollt, in die Activity die A gestartet hat und nicht in C oder B. Der Anwender bekommt gar nicht mit das zuerst B und dann A aufgerufen wird.



    Oje... ich habe jetzt nochmal über das von mir geschriebene drüber gelesen, ich hoffe es ist zu verstehen. Wäre es nicht so spät hätte ich es vermutlich nochmal geschrieben.

    Hi matze,


    danke für deine Antwort und Mühe. So wie du es beschreibst kannte ich es bereits schon. Dabei wird das Problem sein, das wenn ich von C in A springe und dann den "zurück" Button klicke, das ich wieder in C landen werde, das soll nicht möglich sein.


    Da ich heute Abend mal wieder Zeit habe, werde ich es auf dem alt bekannten Weg versuchen.

    Hi,
    ich habe wohl ein Verständnisproblem bei dem starten von Activitys, bzw. wie man diese managed. Bisher hat es mir gereicht ein Activity über startActivity(..) zu starten. Jetzt bin ich an einem Punkt angekommen der einen anderen Ablauf benötigt. Bisher habe ich leider noch nichts gefunden das mich weiter gebracht hat.


    Ich habe in etwa folgendes Szenario: Activity A startet Activity B, Activity A erwartet ein Objekt als Antwort. Es gibt in Activity B eine Liste zum Auswählen die das Objekt als Antwort liefert UND Buttons mit denen weitere Activitys gestartet werden z.B. Cy,Cx und Cz. Jede dieser neuen C Activitys kann ebenfalls das erwartete Objekt an Activity A zurück geben. Wenn in C ein Objekt angeklickt wird, soll in Activity A gesprungen werden und der Activity Stack soll danach leer sein. Wenn man in Activity C den zurück Button klickt, soll man in Activity B landen, also den Weg ganz normal zurück.


    Wie muss ich Activity B aufrufen? Mit startActivityForResult()? Und wie müssen die Activitys C in B aufgerufen werden?


    Ich befürchte ich hatte einen ganz miserablen Einstieg bei den Activitys und Intends, so das ich jetzt ne falsche Vorstellung davon habe.


    Neben Codeschnippeln würde ich mich auch über ein paar Vorschläge zu Tutorials und Code-Beispielen freuen die das Thema betreffen.




    Viele Grüße
    Manuel