martin schliefellner
- Forum-Beiträge: 41
29.02.2012, 20:35:47 via Website
29.02.2012 20:35:47 via Website
Hallo,
Bei Activities gibt es ja die Möglichkeit vor dem Beenden Extras zu setzen die dann beim Aufrufer in einer Methode geholt werden können.
Ich brauche jetzt soetwas für ein Service:
Ich möchte ein Service aufrufen und solange dieses Läuft einen Progressdialog anzeigen lassen.
Das Service verarbeitet etwas und wenn es fertig ist returned mir das Service zB eine ArrayList oder irgendein anderes Objekt.
Ich hab so ein kleines Buch "Schnelleinstieg Android" und dort hab ich etwas bin bindService gefunden. Ich brauch ja ein Callback im Service von der aufrufenden Activity um dort sagen zu können "bin Fertig" ODER es gibt so eine Methode die automatisch aufgerufen wird wenn sich das Service beendet wie bei den Intents mit startActivityForResult.
Leider startet das Service nicht bei mir es ist immer Null und ich blick daweil noch nicht ganz durch wie das genau mit dem return-Wert funktionieren soll:
Mein Acitivity-Teil:
Mein Service:
Im Moment wollte ich das Service nur mal aufrufen und dann gleich wieder schließen um die Log Meldungen zu sehen.
Leider dürfte er die onServiceConnected Methode nicht aufrufen.
Jemand eine Idee?
Wie kann ich das mit dem Rückgabewert lösen?
mfg
Bei Activities gibt es ja die Möglichkeit vor dem Beenden Extras zu setzen die dann beim Aufrufer in einer Methode geholt werden können.
Ich brauche jetzt soetwas für ein Service:
Ich möchte ein Service aufrufen und solange dieses Läuft einen Progressdialog anzeigen lassen.
Das Service verarbeitet etwas und wenn es fertig ist returned mir das Service zB eine ArrayList oder irgendein anderes Objekt.
Ich hab so ein kleines Buch "Schnelleinstieg Android" und dort hab ich etwas bin bindService gefunden. Ich brauch ja ein Callback im Service von der aufrufenden Activity um dort sagen zu können "bin Fertig" ODER es gibt so eine Methode die automatisch aufgerufen wird wenn sich das Service beendet wie bei den Intents mit startActivityForResult.
Leider startet das Service nicht bei mir es ist immer Null und ich blick daweil noch nicht ganz durch wie das genau mit dem return-Wert funktionieren soll:
Mein Acitivity-Teil:
1ProgressDialog dialog = ProgressDialog.show(ListProductsActivity.this, "",
2 "Connecting...", true);
3 products.getProductlist();
4 String output = products.getOutput();
5 try {
6 ArrayList<String> images = new ArrayList<String>();
7
8 JSONArray j_array = new JSONArray(output);
9 JSONObject j_obj = j_array.getJSONObject(0);
10 images.add(j_obj.getString("image"));
11 Intent imageLoaderIntent = new Intent(this, ImageLoaderService.class);
12 //Bundle input = new Bundle();
13 //input.putStringArrayList("IMAGELIST", images);
14
15 imageService = null;
16 Boolean isBound = true;
17
18
19
20
21 ServiceConnection serviceConnection = new ServiceConnection() {
22
23 @Override
24 public void onServiceDisconnected(ComponentName name) {
25 imageService = null;
26 Log.i("LISTPRODUCTACTIVITY", "Service disconnected");
27 }
28
29 @Override
30 public void onServiceConnected(ComponentName name, IBinder service) {
31 imageService = ((ImageLoaderService.ImageLoaderServiceBinder) service).getService();
32 Log.i("LISTPRODUCTACTIVITY", "Service connected");
33 }
34 };
35 bindService(imageLoaderIntent, serviceConnection, Context.BIND_AUTO_CREATE);
2 "Connecting...", true);
3 products.getProductlist();
4 String output = products.getOutput();
5 try {
6 ArrayList<String> images = new ArrayList<String>();
7
8 JSONArray j_array = new JSONArray(output);
9 JSONObject j_obj = j_array.getJSONObject(0);
10 images.add(j_obj.getString("image"));
11 Intent imageLoaderIntent = new Intent(this, ImageLoaderService.class);
12 //Bundle input = new Bundle();
13 //input.putStringArrayList("IMAGELIST", images);
14
15 imageService = null;
16 Boolean isBound = true;
17
18
19
20
21 ServiceConnection serviceConnection = new ServiceConnection() {
22
23 @Override
24 public void onServiceDisconnected(ComponentName name) {
25 imageService = null;
26 Log.i("LISTPRODUCTACTIVITY", "Service disconnected");
27 }
28
29 @Override
30 public void onServiceConnected(ComponentName name, IBinder service) {
31 imageService = ((ImageLoaderService.ImageLoaderServiceBinder) service).getService();
32 Log.i("LISTPRODUCTACTIVITY", "Service connected");
33 }
34 };
35 bindService(imageLoaderIntent, serviceConnection, Context.BIND_AUTO_CREATE);
Mein Service:
1public class ImageLoaderService extends Service {
2
3 private ArrayList<String> images = null;
4
5 private ImageLoaderServiceBinder binder = null;
6
7 @Override
8 public IBinder onBind(Intent intent) {
9
10 return binder;
11 }
12
13 @Override
14 public void onCreate() {
15 super.onCreate();
16
17 }
18
19 @Override
20 public void onStart(Intent intent, int startId) {
21 super.onStart(intent, startId);
22 stopService(intent);
23 }
24
25 public class ImageLoaderServiceBinder extends Binder {
26 public ImageLoaderService getService() {
27 return ImageLoaderService.this;
28 }
29 }
30}
2
3 private ArrayList<String> images = null;
4
5 private ImageLoaderServiceBinder binder = null;
6
7 @Override
8 public IBinder onBind(Intent intent) {
9
10 return binder;
11 }
12
13 @Override
14 public void onCreate() {
15 super.onCreate();
16
17 }
18
19 @Override
20 public void onStart(Intent intent, int startId) {
21 super.onStart(intent, startId);
22 stopService(intent);
23 }
24
25 public class ImageLoaderServiceBinder extends Binder {
26 public ImageLoaderService getService() {
27 return ImageLoaderService.this;
28 }
29 }
30}
Im Moment wollte ich das Service nur mal aufrufen und dann gleich wieder schließen um die Log Meldungen zu sehen.
Leider dürfte er die onServiceConnected Methode nicht aufrufen.
Jemand eine Idee?
Wie kann ich das mit dem Rückgabewert lösen?
mfg
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.