Hilfe bei "ACTION_SCREEN_ON und OFF"

  • Antworten:4
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 1.525

29.12.2013, 20:06:19 via Website

Hallo alle zusammen.

Etwa habe ich Weihnachten zu viel getrunken und mein Hirn ist nun tot oder keine Ahnung
was ich diesmal falsch mache. :grin:

Ich teste gerade bisschen mit dem BroadcastReceiver rum.
Und zwar wollte ich mal das ACTION_SCREEN_ON und ACTION_SCREEN_OFF testen.

Sobald der BroadcastReceiver gestartet wird, stürzt meine App einfach ab.
Der BroadcastReceiver wird durch die Activity gestartet.

Hier mal der Code vom onReceive:
1@Override
2 public void onReceive(Context context, Intent intent) {
3
4 if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
5
6 Toast.makeText(context, "ScreenOn", Toast.LENGTH_SHORT).show();
7
8 } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
9
10 Toast.makeText(context, "ScreenOff", Toast.LENGTH_SHORT).show();
11
12 }
13 }

Dazu die LogCat:
112-29 19:54:11.436 31334-31334/de.mk.lernproject E/AndroidRuntime﹕ FATAL EXCEPTION: main
2 Process: de.mk.lernproject, PID: 31334
3 java.lang.RuntimeException: Unable to start receiver de.mk.lernproject.Broad: java.lang.NullPointerException
4 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2426)
5 at android.app.ActivityThread.access$1700(ActivityThread.java:135)
6 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)
7 at android.os.Handler.dispatchMessage(Handler.java:102)
8 at android.os.Looper.loop(Looper.java:136)
9 at android.app.ActivityThread.main(ActivityThread.java:5017)
10 at java.lang.reflect.Method.invokeNative(Native Method)
11 at java.lang.reflect.Method.invoke(Method.java:515)
12 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
13 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
14 at dalvik.system.NativeStart.main(Native Method)
15 Caused by: java.lang.NullPointerException
16 at de.mk.lernproject.Broad.onReceive(Broad.java:24)
17 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2419)
18            at android.app.ActivityThread.access$1700(ActivityThread.java:135)
19            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)
20            at android.os.Handler.dispatchMessage(Handler.java:102)
21            at android.os.Looper.loop(Looper.java:136)
22            at android.app.ActivityThread.main(ActivityThread.java:5017)
23            at java.lang.reflect.Method.invokeNative(Native Method)
24            at java.lang.reflect.Method.invoke(Method.java:515)
25            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
26            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
27            at dalvik.system.NativeStart.main(Native Method)

Broad.java:24 ist bei der Zeile:
1if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))

Verstehe nicht was ich da falsch mache und ein Caused by: java.lang.NullPointerException kommt.
Habe sogar schon gegoogle und danach geschaut wie es gemacht wird.
Aber kommt immer das gleiche raus.

Hoffe ihr könnt mir helfen.


LG

— geändert am 29.12.2013, 20:08:05

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.888

29.12.2013, 20:43:28 via Website

Hallo,

probier mal so.

1import android.app.Activity;
2import android.content.BroadcastReceiver;
3import android.content.Context;
4import android.content.Intent;
5import android.content.IntentFilter;
6import android.os.Bundle;
7import android.util.Log;
8import android.widget.Toast;
9
10public class Screen extends Activity {
11 BroadcastReceiver mybroadcast = new BroadcastReceiver() {
12
13 @Override
14 public void onReceive(Context context, Intent intent) {
15 Log.e("BroadcastReceiver", "Receiver");
16
17 if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
18 Log.e("BroadcastReceiver", "Screen ON");
19 Toast.makeText(context, "ScreenOn", Toast.LENGTH_SHORT).show();
20 } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
21 Log.e("BroadcastReceiver", "Screen OFF");
22 Toast.makeText(context, "ScreenOff", Toast.LENGTH_SHORT).show();
23 }
24
25 }
26 };
27
28 @Override
29 public void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31 setContentView(R.layout.activity_main);
32
33 registerReceiver(mybroadcast, new IntentFilter(Intent.ACTION_SCREEN_ON));
34 registerReceiver(mybroadcast,
35 new IntentFilter(Intent.ACTION_SCREEN_OFF));
36 }
37}

Edit:

Hab gerade noch ein kleines TuT gefunden mit Service Anbindung http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/

— geändert am 29.12.2013, 20:59:12

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung-App

Download Samsung Firmware Tool

Meine Wunschliste

Telegram News Feed

Antworten
  • Forum-Beiträge: 1.525

29.12.2013, 22:56:54 via Website

Hallo Ludy.

Funktioniert wunderbar.:D
Danke dir.

Damit ist aber noch immer nicht geklärt, warum das nicht bei mir so Funktioniert wie ich das gezeigt hatte?

So wie du es mir gezeigt hast, geht das dann nur, wenn die Activity nicht geschlossen ist aus dem Task.
Sobald sie aus dem Task gewischt wurde, ist Ende.
Mit einem Service kann ich es immer im Hintergrund laufen lassen.

Dann muss ich das irgendwie mit einer Service Klasse und BroadcastReceiver Klasse zusammen bauen.

EDIT:

Gerade eben auch erst deine EDIT gesehen.
Muss ich wohl leider so machen.
Dachte geht alles ohne.

Danke dir nochmal.



LG

— geändert am 29.12.2013, 22:59:50

Antworten
  • Forum-Beiträge: 1.525

30.12.2013, 16:00:33 via Website

Danke dir Ludy.

Dann muss ich es erstmal auch so machen.



LG

Antworten