Um aktiv im Android Forum teilnehmen zu können, musst Du Dich bei AndroidPIT registriert haben.
Martin Grulich ![]() Rang: Schülersprecher Beiträge: 55 Eintrittsdatum: 14.12.2009 |
Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 19.04.2011 15:18:56
Hallo Leute,
ich habe inzwischen einige Zeit damit verbracht zu Googlen. Erstmal zu meiner Situation. Im grunde möchte ich zyklisch im Hintergrund prüfen ob neue Eintrage in einer externen Datenbank sind, die ich mir via JSON von einem http-Server hole. Nun soll dies natürlich in erster Linie im Hintergrund geschehen, da dafür ja keine Interaktion vom Nutzer notwendig ist. Hintergrundaktivitäten führe ich meines Wissen entweder mit einem Thread oder mit einem Service. Nun möchte ich sowohl bei einem Neustart des Smartphones zyklisch im Hintergrund diese Abfrage durchführen, als auch nach Änderungen in den Einstellungen (z.B. Intervall oder ähnliches) diesen Service (neu) starten. Bisher starte ich meinen Timer mit dem Alarmmanager (alarmManager.setRepeating) nach die Einstellungen geändert wurden. Nur wie mache ich das aus meinem Broadcastreceiver heraus in Kombination eines "Service"es, den ich bis dato nicht verwendet habe, da ich dies bisher in einem Thread gelöst habe und ich mit dem Service bisher nicht gearbeitet habe und mir die ganzen Tutorials irgendwie nicht so recht weiterhelfen. Danke & Gruß Martin |
![]() Gelöschter Account |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 19.04.2011 16:12:02
Es gibt mehrere Optionen. Eine davon:
Du trägst den Service im Manifest ein damit er beim Boot sofort loslegt. Dazu benötigt er einen IntentFilter. Der Service läuft autark von Deiner App, könnte wiederum einen Timer verwenden und kümmert sich dann zyklisch um das Abholen der Daten und das Verarbeiten der Daten (z.B. Datenbank?). Zugleich könnte der Service auch ein BroadcastReceiver sein damit man ihm veränderte Einstellungen mitteilen kann. Der Service könnte einen Eintrag im NotificationBar anlegen über den dann eine bestimmte Activity Deiner App aktiviert werden könnte. Activities Deiner App könnten wiederum BroadcastReceiver sein um Daten, die vom Service verschickt wurden, anzeigen zu können. Das alles ist eigentlich nicht viel Arbeit und nicht übermäßig kompliziert. Man muß sich nur einmal zurücklehnen und überlegen was man eigentlich alles will und welcher App-Teil was machen soll. Alternativen gibt es zum Beispiel im Verwenden von Bindern (statt Broadcasts), im Starten des Service durch eine Activity statt durch das System, etc. etc. Gruß Harald
----- |
Markus B. ![]()
Rang: Android Doc Beiträge: 384 Eintrittsdatum: 22.11.2010 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 20.04.2011 00:22:21
Hi,
ich habe mal ein kleines Remote Service Beispiel zusammen getippt. Das Beispiel besteht aus einer Activity und einem RemoteService. Die Activity kann per Button den Service starten, stoppen und eine Variable vom Service abfragen. Alles in allem nichts wirklich wildes aber evtl. hilft es dir in die Materie besser einzusteigen. Sollten sich fragen ergeben melde dich einfach Gruß, Markus
----- |
Stefan S. ![]()
Rang: Android Prof Beiträge: 425 Eintrittsdatum: 10.11.2009 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 20.04.2011 11:08:10 Markus B. Hi, ich habe mal ein kleines Remote Service Beispiel zusammen getippt. Das Beispiel besteht aus einer Activity und einem RemoteService. Die Activity kann per Button den Service starten, stoppen und eine Variable vom Service abfragen. Alles in allem nichts wirklich wildes aber evtl. hilft es dir in die Materie besser einzusteigen. Sollten sich fragen ergeben melde dich einfach Gruß, Markus Danke für deine Mühe! So was habe ich gesucht. |
Martin Grulich ![]() Rang: Schülersprecher Beiträge: 55 Eintrittsdatum: 14.12.2009 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 22.04.2011 13:10:09
Nun habe ich ein wenig mit dem Servie rumprobiert und stehe nun vor folgendem Problem:
Ich habe in in meinem Service folgendes in der OnCreate stehen: 1@Override Doch nach "Log.d("MyApp", "Service get Preference-Handler");" hängt sich die App weg und kommt nicht mehr dazu "Log.d("MyApp", "Service getted Prefs");" zu machen. Nur fine ich meinen Fehler nicht, hat jemand eine Idee ?2 public void onCreate() { 3 super.onCreate(); 4 Log.d("MyApp", "Service created !"); 5 /*preferences = 6 getSharedPreferences( 7 getPackageName()+"_preferences", 8 MODE_PRIVATE);*/ 9 preferences = 10 getSharedPreferences( 11 getPackageName()+"_preferences", 12 MODE_PRIVATE); 13 Log.d("MyApp", "Service get Preference-Handler"); 14 Boolean pref_auto_update = preferences.getBoolean("auto_update", false); 15 Integer pref_auto_update_interval = preferences.getInt("auto_update_interval", 10); 16 Log.d("MyApp", "Service getted Prefs"); 17 INTERVAL = pref_auto_update_interval*1000; Danke & Gruß Martin |
Markus B. ![]()
Rang: Android Doc Beiträge: 384 Eintrittsdatum: 22.11.2010 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 22.04.2011 23:03:54
Hi,
hast du mal den Stacktrace von dem entsprechenden Absturz ? Gruß, Markus
----- |
Martin Grulich ![]() Rang: Schülersprecher Beiträge: 55 Eintrittsdatum: 14.12.2009 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 22.04.2011 23:11:18
Hi der Stacktrace sieht folgendermaßen aus:
1DalvikVM[localhost:8611]
2 Thread [ 3 ActivityThread.handleCreateService(ActivityThread$CreateServiceData) line: 2790 4 ActivityThread.access$3200(ActivityThread, ActivityThread$CreateServiceData) line: 119 5 ActivityThread$CreateServiceData(ActivityThread$H).handleMessage(Message) line: 1917 6 ActivityThread$H(Handler).dispatchMessage(Message) line: 99 7 Looper.loop() line: 123 8 ActivityThread.main(String[]) line: 4363 9 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 10 Method.invoke(Object, Object...) line: 521 11 ZygoteInit$MethodAndArgsCaller.run() line: 860 12 ZygoteInit.main(String[]) line: 618 13 NativeStart.main(String[]) line: not available [native method] 14 Thread [<13> Binder Thread #2] (Running) 15 Thread [<11> Binder Thread #1] (Running) 16 Thread [<15> Timer-0] (Running) |
Markus B. ![]()
Rang: Android Doc Beiträge: 384 Eintrittsdatum: 22.11.2010 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 22.04.2011 23:18:28 — geändert am 22.04.2011 23:23:16
Hmmmmm, das ist doch nicht der stacktrace des Fehlers ?
Ich hätte nun sowas in dieser Richtung erwartet: 104-22 23:06:29.814: ERROR/AndroidRuntime(2530): FATAL EXCEPTION: main 2 java.lang.RuntimeException: Unable to instantiate service com.example.MyServiceImpl: java.lang.NullPointerException 3 at android.app.ActivityThread.handleCreateService(ActivityThread.java:1929) ..... Interessant wäre es zu wissen wie du "preferences" initialisiert hast. 1preferences = 2 getSharedPreferences( 3 getPackageName()+"_preferences", 4 MODE_PRIVATE); Das folgender Code bei mir funktioniert: 1final SharedPreferences preferences = 2 getSharedPreferences( 3 getPackageName() + "_preferences", 4 MODE_PRIVATE); Gruß, Markus
----- |
Martin Grulich ![]() Rang: Schülersprecher Beiträge: 55 Eintrittsdatum: 14.12.2009 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 22.04.2011 23:23:05
Wenn ich das mit einem Try-Catch umschiffe, kommt dabei folgendes raus:
104-22 21:22:12.691: DEBUG/EI112(245): java.lang.ClassCastException: java.lang.String
|
Markus B. ![]()
Rang: Android Doc Beiträge: 384 Eintrittsdatum: 22.11.2010 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 22.04.2011 23:42:54 — geändert am 22.04.2011 23:43:59
Okay, das könnte folgendes Problem sein:
Was genau speicherst du denn via SharedPreference ? Mit diesem Mechanismus ist es z.B. nicht möglich Objekte (bezogen auf eigene Objekte), Byte-Arrays, Bilder, Fotos ect. zu speichern. Wenn du dann dort z.B. ein Objekt speicherst, würde die ClassCastException Sinn ergeben. Gruß, Markus
----- |
Martin Grulich ![]() Rang: Schülersprecher Beiträge: 55 Eintrittsdatum: 14.12.2009 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 23.04.2011 00:06:14
An sich nichts nennenswerte,
da sind ein paar Checkboxen definiert, 2 ListPreferences und eine RingtonePreference. 1<?xml version="1.0" encoding="utf-8"?>
2<PreferenceScreen 3 xmlns:android="http://schemas.android.com/apk/res/android"> 4 <PreferenceCategory 5 android:title="@string/txt_preferences_update_title"> 6 <CheckBoxPreference 7 android:title="@string/txt_preferences_auto_update_title" 8 android:summary="@string/txt_preferences_auto_update_summary" 9 android:key="auto_update" /> 10 <ListPreference 11 android:title="@string/txt_preferences_auto_update_interval_title" 12 android:summary="@string/txt_preferences_auto_update_interval_summary" 13 android:key="auto_update_interval" 14 android:entries="@array/auto_update_interval" 15 android:entryValues="@array/auto_update_interval_values" 16 android:defaultValue="10" /> 17 </PreferenceCategory> 18 <PreferenceCategory 19 android:title="@string/txt_preferences_notification_title"> 20 <CheckBoxPreference 21 android:title="@string/txt_preferences_notification" 22 android:summary="@string/txt_preferences_notification_summary" 23 android:key="notification" /> 24 <CheckBoxPreference 25 android:title="@string/txt_preferences_update_sound" 26 android:dependency="notification" 27 android:summary="@string/txt_preferences_update_sound_summary" 28 android:key="update_sound" /> 29 <CheckBoxPreference 30 android:title="@string/txt_preferences_update_vibrate" 31 android:dependency="notification" 32 android:summary="@string/txt_preferences_update_vibrate_summary" 33 android:key="update_vibrate" /> 34 <RingtonePreference 35 android:title="@string/txt_preferences_ringtone" 36 android:key="Ringtone" 37 android:dependency="notification" 38 android:summary="" 39 android:ringtoneType="notification" /> 40 </PreferenceCategory> 41 <PreferenceCategory 42 android:title="@string/txt_preferences_behavior_title"> 43 <CheckBoxPreference 44 android:title="@string/txt_preferences_behavior_hide_read_title" 45 android:summary="@string/txt_preferences_behavior_hide_read_summary" 46 android:key="hide_read" /> 47 <CheckBoxPreference 48 android:title="@string/txt_preferences_behavior_load_complete_title" 49 android:summary="@string/txt_preferences_behavior_load_complete_summary" 50 android:key="load_complete" /> 51 <ListPreference 52 android:title="@string/txt_preferences_reports_max_count" 53 android:summary="@string/txt_preferences_reports_max_count_summary" 54 android:key="reports_max_count" 55 android:entries="@array/reports_max_count" 56 android:entryValues="@array/reports_max_count_values" 57 android:defaultValue="20" /> 58 </PreferenceCategory> 59</PreferenceScreen> |
Markus B. ![]()
Rang: Android Doc Beiträge: 384 Eintrittsdatum: 22.11.2010 |
RE: Versändnisfrage - BroadCast, Service - Funktion - Lösung verfasst am 23.04.2011 01:42:21
Tja, dann weiß ich so nun auch nicht wirklich weiter ...
Kannst du mir dein Projekt irgendwie zukommen lassen via mail oder so ? Gruß, Markus
----- |