BroadcastReceiver: "Befehle" von Activity an Service senden und vice versa

  • Antworten:0
Gelöschter Account
  • Forum-Beiträge: 694

07.08.2012, 10:13:20 via Website

Mehrfach im Forum nachgefragt, deshalb als Schnipsel:

Receiver im Service:

1// Im Service
2public class MyService extends Service {
3
4 // Inner Class BroadcastReceiver
5 public class MyBroadcastReceiver extends BroadcastReceiver {
6
7 // Der Name des dynamischen BroadcastReceivers
8 public static final String TAG = "dein.package.MyService.MyBroadcastReceiver";
9
10 // Liste der moeglichen "Befehle" an den Service
11 public static final int ACTION_IRGENDWAS = 1;
12
13 @Override
14 public void onReceive(final Context context, final Intent intent) {
15 if (intent != null) {
16 Bundle bundleExtras = intent.getExtras();
17
18 if (bundleExtras != null) {
19 int action = bundleExtras.getInt("ACTION");
20 if (action == ACTION_IRGENDWAS) {
21 // ...
22 }
23 }
24 }
25 }
26 }
27
28 // Var
29 private MyBroadcastReceiver receiver;
30
31 @Override
32 public void onDestroy() {
33 // ...
34 processStopBroadcastReceiver();
35 // ...
36 }
37
38 // Alternativ im onCreate()
39 @Override
40 public int onStartCommand(final Intent intent, final int flags, final int startId) {
41 // ...
42 processStartBroadcastReceiver();
43 // ...
44 }
45
46 // Methode zum Starten des BroadcastReceivers
47 private void processStartBroadcastReceiver() {
48 IntentFilter intentFilter = new IntentFilter(MyBroadcastReceiver.TAG);
49
50 receiver = new MyBroadcastReceiver();
51 if (receiver != null && intentFilter != null) {
52 registerReceiver(receiver, intentFilter);
53 }
54 }
55
56 // Methode zum Stoppen des BroadcastReceivers
57 private void processStopBroadcastReceiver() {
58 if (receiver != null) {
59 unregisterReceiver(receiver);
60 receiver = null;
61 }
62 }
63}

Activity schickt "Befehl" an laufenden Service:

1// In einer Activity
2public class MyActivity extends Activity {
3
4 // Methode zum Verschicken eines Broadcast
5 private void processSendBroadcast(final String receiver, final int action) {
6 Intent intent = new Intent();
7 intent.putExtra("ACTION", action);
8 intent.setAction(receiver);
9 sendBroadcast(intent);
10 }
11
12 // ... und so wird der Broadcast an den laufenden Service versendet
13 processSendBroadcast(MyService.MyBroadcastReceiver.TAG, MyService.MyBroadcastReceiver.ACTION_IRGENDWAS);
14}

— geändert am 07.08.2012, 13:02:39

Antworten