Beiträge von Stefan

    Hey ^^
    manchmal ist es nötig ein Widget nicht in einem Intervall auszuführen, sondern zu festgelegten oder programmatisch berechneten Zeitpunkten.
    Dafür ist es nötig im AndroidManifest eine weitere Intent Action einzutragen, die abgefangen werden soll:

    Code
    <receiver android:name=".widgets.Widget">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
                    <action android:name="mypackage.widget.MY_WIDGET_UPDATE"/> // DIESE ZEILE KOMMT HINZU
                </intent-filter>
                <meta-data android:name="android.appwidget.provider"
                    android:resource="@xml/widget_info"/>
            </receiver>


    Dann gibt es noch ein paar änderungen am AppWidgetProvider:
    In der onUpdate(...) funktion des AppWidgetProvider müssen wir den Ausführungszeitpunkt festlegen (es sei denn es ist ein Intervall zu festgelegen Uhrzeiten, dann kann man das auch in der onEnabled(...) machen.


    Da der AlarmManager nicht die onUpdate(...) aufruft sondern die onReceive(...) muss diese funktion auch noch implementiert werden:

    Code
    function onReceive(...) {
    	super.onReceive(context, intent);
    	if( UPDATE_WIDGET.equals(intent.getAction()) ) {
    		AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); // AppWidgetManager wird instanziert
    		int ids[] = appWidgetManager.getAppWidgetIds(new ComponentName(context.getPackageName(), getClass().getName())); // IDs werden ausgelesen
    		onUpdate(context, appWidgetManager, ids); // onUpdate wird explizit aufgerufen
             }
    }


    durch den aufruf der onUpdate(...) funktion wird der timer immerwieder neu eingestellt (bzw. er gilt ja nur einmal)
    Das wichtigste ist allerdings das man den AlarmManager auch wieder abbrechen muss, da er sonst trotz entfernen aller Widgets ewig weiterlaufen würde.
    Das geschieht am Besten in der onDisabled(..) funktion, die nur aufgerufen wird, wenn alle Widgets entfernt wurden

    Code
    public void onDisabled(Context context) {
    	super.onDisabled(context);
    	AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    	Intent i = new Intent(UPDATE_WIDGET);
    	PendingIntent pending = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_ONE_SHOT);
    	alarm.cancel(pending);
    }


    Damit kann man relativ einfach zu jeder beliebiegen Zeit updaten, zum Beispiel Dienstags immer um 17 Uhr und Mittwoch um 18 Uhr ( das wiederum wäre am besten mit einem Intervall in der onEnabled geregelt).


    Noch ein Fehler der auftreten könnte: Wenn man den Updatezeitpunkt ausversehen immer in der Vergangenheit wählt, dann wird der "Alarm" nachgeholt und wieder ein Alarm gesetzt nachgeholt etc...
    Das wird das Handy daran hindern in den Standby Mode zu wechseln und innerhalb von ein paar Stunden den gesamten Akku "fressen".

    du solltest es gar nicht nötig haben, irgendwelche expliziten funktionen zum freigeben aufrufen zu müssen.


    Guck aber mal ob du nicht irgendwas an Speicher NoGos gemacht hast, wie zum beispiel einen Context als final zu deklarieren oder irgendwie in einer statischen weise zu blockieren, bspw. wenn dein Bitmap static wäre, dann wäre das der fall.

    hab mir mit Hilfe dieser Erläuterung
    http://buildmobile.com/alarmmanager-and-sleepy-android-apps/
    mal etwas zusammen gebastelt.
    Ich hab in der Update einen Zeitpunkt festgelegt, an dem geupdatet werden soll und dann wie in der Erläuterung beim PendingIntent auf die selbige Klasse verwiesen.
    In der onReceive fang ich das dann ab und hol mir den AppWidgetManager und die IDs. Die übergeb ich dann an die onUpdate und damit geht das Spiel wieder von vorne los.
    Ob das funktioniert werde ich morgen nachmittag sagen, wenn ichs testen konnte.
    Edit: Habs heute nicht testen können, weil es mir übernacht, wegen einem falschen Zeichen ( > statt < ) den kompletten Akku geleert hat.
    Morgen werd ich sehen ob es funktioniert und dann die entsprechend wichtigen Stellen des Quellcodes reinstellen, falls jemand mal vor dem selben Problem steht.

    Ich hab davon gar nichts gelesen, aber ich hatte bisher keine Probleme und ich glaub, damit ist eher sowas wie Copyright Verletzung gemeint.
    Alles andere wäre auch unsinnig, denn Sicherheitslücken sind im OS nicht in einer App (bzw. die in der App sind relativ unwichtig, denn wenn die einem Zugriff aufs System geben, dann ist das eine Sicherheitslücke im OS)
    Von daher veröffentliche es, wenn du nicht irgendwelche Bilder o.ä. drin hast, wofür du kein Copyright hast.
    Auf die Angaben übernehme ich selbstverständlich kein Gewähr.


    PS: eine Erkennungsrate von 96,2% ? mit Frontkamera oder Hauptkamera?
    Kann mir das kaum vorstellen, die qualität von den bildern ist doch gar nicht gut genug für sowas...

    Hey,
    ich arbeite grad an einem Widget für eine App.
    Dabei möchte ich, das das widget nur geupdatet wird, wenn der Display aktiv ist.
    Bei der developer guide steht, man müsse das mit einem AlarmManager realisieren.
    Da aber die developer guide an den entscheidenden stellen, nicht so ausführlich ist, wie an den meisten unwichtigen, ist dort nicht erläutert, wie und wo man den AlarmManager einstellen muss.
    Ich hoffe hier kann mir jemand mehr dazu sagen.
    Edit:
    Hab ein paar Infos gefunden, allerdings ist das immer mit einer Extra Klasse gelöst, was ich gerne vermeiden würde und ich würde das Widget gerne immer zu programmatisch festgelegten Zeitpunkten updaten und nicht in einem Intervall.

    Hey,
    hab grad ein kleines Problem.
    Ich hab ein android.text.Time Objekt mit einem Datum.
    Das wandel ich mittels der Time.format(String format) Funktion um in ein lesbares Datum.
    Jetzt möchte ich aber das der Tag ausgeschrieben wird und finde das kürzel dafür nirgends, bei google gibts nur haufenweise zeug über DateFormat.
    Ich hoffe hier weiß jemand weiter, ne liste mit den %-Kürzeln ( hab vergessen wie man die nennt ) wäre auch gut


    MfG,
    Stefan

    vermutlich einfacher fehler,
    wenn du requestfocus einsetzt wird der focus dem nächsten übergeben und damit ist die nächste if anweisung wieder wahr, dort wird wieder der wert eingetragen und der focus geht zum nächsten und immer so weiter.
    Abhilfe sollte da schaffen indem du die ifs durch else ifs ersetzt also so

    hey,
    hab ne vermutlich etwas bessere Lösung, da das FrameLayout da nicht über das TabWidget geht.
    Hier das xml:


    BTW hast du etwas darüber herausgefunden wie man das Design ändern kann?
    Denn wenn man das nach unten macht sieht das echt schrecklich aus

    musste targetSDK auf 11 festlegen, aber in dem beispiel ist minSDK 4, ist das abwärtskompatibel, oder läuft das Programm dann nur ab 3.0?
    hab mich jetzt erstmal entschieden einfach ein TabHost zu nehmen, kann man da eig auch das TabWidget unter den Content machen?

    Hey,
    ich hab ein Problem, ich arbeite an einem TabHost, da die allerdings veraltet sind, wollte ich die empfohlene Lösung mit ActionBar nehmen.
    Problem laut Eclipse gibts die gar nicht. Hab geupdatet auf Developertools V. 14, aber es gibt sie immernoch nicht. Genau wie FragmentActivity.
    Was ist falsch, warum gibts die nicht?!