Sehr viele BroadcastReceiver fragen...

  • Antworten:6
  • Bentwortet
Michele
  • Forum-Beiträge: 1.525

31.05.2013, 18:09:08 via Website

Hallo alle zusammen.

Ich bastel gerade gerade mit/an dem BroadcastReceiver rum.

1. Wie kann ich den BroadcastReceiver von einer Activity aus starten?
2. Wie kann ich den BroadcastReceiver von einen Service aus starten?
3. Wie kann ich einen BroadcastReceiver von einer Widget aus starten? Also wenn ich die Widget auf dem Display ziehe
das der BroadcastReceiver anspringt?

Per Booten in der Manifest hab ich schon heraus gefunden.
Aber das ist eigentlich nicht das was ich möchte. Wichtig ist das ich den
BroadcastReceiver per Widget an und aus machen kann. Also wenn ich die Widget auf dem Display bringe oder wieder
entferne.

4. Wenn ich per Booten den BroadcastReceiver starte lasse mit einem AlarmManager, dann startet er
den BroadcastReceiver gleich anstatt erst das erste mal zu starten wenn der AlarmManager es sagt.
Wie ist das alles machbar?

Zurzeit Startet mein BroadcastReceiver per AlarmManager einen Service.
Hoffe ihr könnt mir echt weiterhelfen. Würde mich freuen.


LG

— geändert am 31.05.2013, 18:09:28

Antworten
Andy N.
  • Forum-Beiträge: 3.112

31.05.2013, 19:09:03 via Website

Es gibt die Methoden onEnabled() und onDeleted(), die aufgerufen werden, wenn das Widget das erste mal erstellt bzw. gelöscht wird.

Michele

Antworten
Michele
  • Forum-Beiträge: 1.525

31.05.2013, 19:12:32 via Website

Hallo Andy.
Danke dir für die Info.:*)
Aber das weiß ich ja schon :*). Was ich brauche oder wissen muss ist, wie ich den Code schreiben muss das der BroadCastReceiver sich beendet,
wenn ich ihn im onDeleted(); oder onDisabled(); drin habe.


LG

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

31.05.2013, 19:26:17 via App

Hi Michele,

Vielleicht hilft dir das weiter?

@Override
public void onDestroy() {
unregisterReceiver(receiver);
Toast.makeText(this, "onDestroy has been called", Toast.LENGTH_SHORT).show();
}

Hier der Link zu Stack Overflow: http://stackoverflow.com/questions/7465575/where-to-unregister-broadcastreceiver-in-a-service

— geändert am 31.05.2013, 19:29:37

Antworten
Michele
  • Forum-Beiträge: 1.525

31.05.2013, 19:31:52 via Website

Kosta S.
Hi Michele,

Vielleicht hilft dir das weiter?

@Override
public void onDestroy() {
unregisterReceiver(receiver);
Toast.makeText(this, "onDestroy has been called", Toast.LENGTH_SHORT).show();
}

Hier der Link zu Stack Overflow: http://stackoverflow.com/questions/7465575/where-to-unregister-broadcastreceiver-in-a-service

Danke das habe ich schon versucht.
Du meinst wohl mit onDestroy(); im Service den BroadcastReceiver beenden?
Ich muss aber im Widget den BroadcastReceiver beenden.
Da geht das irgendwie nicht.

onDeleted(); oder onDisabled(); << Werden ausgeführt, wenn ich das Widget vom Display/Home ziehe.

EDIT: Also habe es hinbekommen das es sich beendet durch das weg machen vom Home/Display.
Aber trotzdem kommt dann noch eine Fehlermeldung und stürzt ab.


1public BroadServiceTest mBroadService;
2
3@Override
4public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
5 super.onUpdate(context, appWidgetManager, appWidgetIds);
6
7
8 mBroadService = new BroadServiceTest();
9
10}
11
12 @Override
13public void onDeleted(Context context, int[] appWidgetIds) {
14 super.onDeleted(context, appWidgetIds);
15
16 context.unregisterReceiver(mBroadService);
17
18}

Kackt aber trotzdem ab obwohl alles beendet ist und nichts mehr auf dem Display/Home.

LG

— geändert am 31.05.2013, 19:51:35

Antworten
Michele
  • Forum-Beiträge: 1.525

01.06.2013, 00:03:28 via Website

Bekomme ich nicht hin.

Wie auch wenn ich nur den BroadcastReceiver über Booten zum Starten bekomme.
Deswegen fragte ich ja wie ich ihn Starte und beende über Widget/onUpdate();

OK wusste nicht das manchmal der BroadcastReceiver trotzdem startet, wenn ich Debug.
Obwohl ich nur zurzeit per Booten angegeben habe.

106-01 00:05:28.349 6833-6833/de.mk.widgettest E/AndroidRuntime: FATAL EXCEPTION: main
2 java.lang.RuntimeException: Unable to start receiver de.mk.widgettest.AppWidget: java.lang.IllegalArgumentException: Receiver not registered: null
3 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2449)
4 at android.app.ActivityThread.access$1600(ActivityThread.java:151)
5 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
6 at android.os.Handler.dispatchMessage(Handler.java:99)
7 at android.os.Looper.loop(Looper.java:137)
8 at android.app.ActivityThread.main(ActivityThread.java:5293)
9 at java.lang.reflect.Method.invokeNative(Native Method)
10 at java.lang.reflect.Method.invoke(Method.java:511)
11 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
12 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
13 at dalvik.system.NativeStart.main(Native Method)
14 Caused by: java.lang.IllegalArgumentException: Receiver not registered: null
15 at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:657)
16 at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1630)
17 at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:452)
18 at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:452)
19 at de.mk.widgettest.AppWidget.onDisabled(AppWidget.java:87)
20 at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:91)
21 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2442)
22 ... 10 more

Laut Android Studio liegt es an:
1at de.mk.widgettest.AppWidget.onDisabled(AppWidget.java:87)
2
3>>context.unregisterReceiver(mBroadService);<<

LG

— geändert am 01.06.2013, 00:12:04

Antworten