【发布时间】:2014-10-10 06:37:18
【问题描述】:
我需要听 screen_on 和 screenof_action。
我将 BroadcastReceiver 与 Service 一起使用。但我得到错误。如何修复我的代码?
这是我的广播接收器类:
public class BroadcastReceiver extends android.content.BroadcastReceiver {
public static boolean screenOff = true;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
// System.out.println("System ON OLDU ON ON ON ON ON ON");
Intent i = new Intent(context, MyNewService.class);
i.putExtra("screen_state", true);
context.startService(i);
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
Intent i = new Intent(context, MyNewService.class);
i.putExtra("screen_state", false);
context.startService(i);
// System.out.println("System OFFFF OLDU OFFFF OFFFF OFFFF OFFFF");
}
}
}
这是我的服务类:
public class MyNewService extends Service {
BroadcastReceiver locker;
public static boolean screenOn = true;
public void onCreate(){
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
locker=new BroadcastReceiver();
registerReceiver(locker, filter);
}
@Override
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.i("START", "onStart");
screenOn = intent.getBooleanExtra("screen_state", false);
if(screenOn){
// startActivity(new Intent(this, MainActivity.class));
Log.i("SCREEN", "SCREEN OFFFFFFFFFFFFFFFF");
} else {
Log.i("SCREEN", "SCREEN OF FFFFFFFFFFFFFFFFFFFFFFFFF");
}
// If the screen is off then the device has been locked
}
@Override
public void onDestroy(){
unregisterReceiver(locker);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
这是我的错误代码:
:19:52.696 32141-32141/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.codeexamples.app, PID: 32141
java.lang.RuntimeException: Unable to start service com.codeexamples.app.MyNewService@42672530 with Intent { cmp=com.codeexamples.app/.MyNewService }: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2705)
at android.app.ActivityThread.access$2100(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.codeexamples.app.MyNewService.onStart(MyNewService.java:25)
at android.app.Service.onStartCommand(Service.java:450)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2688)
at android.app.ActivityThread.access$2100(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
这是我的清单许可:
服务:
<service
android:name="com.codeexamples.app.MyNewService"
android:enabled="true" />
用于广播:
<receiver android:name="com.codeexamples.app.BroadcastReceiver" >
</receiver>
许可:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
当我在 logcat 中检查错误时,会显示这一行:
screenOn = intent.getBooleanExtra("screen_state", false);
总是显示这一行,我认为这行有问题。
【问题讨论】:
-
你有 java.lang.NullPointerException,发布整个堆栈跟踪
-
我认为你想要所有错误,我添加了我的代码
-
java.lang.NullPointerException 来自 com.codeexamples.app.MyNewService.onStart(MyNewService.java:25)
-
我知道并且我在主题的末尾添加了这一行。请检查。
-
所以
intent为空,请阅读onStartCommand,因为onStart已弃用