java - 服务无法正常启动

标签 java android

我正在尝试为此提供服务和通知。我有的是两个按钮。单击“开始”按钮“启动”应启动服务,单击“停止”应停止。但现在他们没有工作。我有一个主类、服务类和通知类。这是我的代码和 logcat 输出。

我的服务等级在这里

package com.zafar.batterynotify;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class BatteryService extends Service {
Notify notification = new Notify();

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    notification.initNotification(this);
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    return START_STICKY;
}

public void onDestroy() {
    super.onDestroy();
    notification.cancelNotification(this);
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
}

}

通知类

package com.zafar.batterynotify;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;

public class Notify {
private static final int NOTIFICATION_ID = 1;

public void initNotification(Context actContext) {
    String ns = actContext.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) actContext.getSystemService(ns);
    int icon = R.drawable.ic_launcher;
    CharSequence tickerText = "Service Started";
    long when = System.currentTimeMillis();
    Notification notification = new Notification(icon, tickerText, when);
    notification.flags = Notification.FLAG_ONGOING_EVENT;
    //Context context = actContext.getApplicationContext();
    Context context = MyApplication.getContext();
    CharSequence contentTitle = "Ongoing service";
    CharSequence contentText = "This is service is ongoing";
    Intent notificationIntent = new Intent(context, BatteryNotify.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, notification);
}

public void cancelNotification(Context actContext) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) actContext.getSystemService(ns);
    mNotificationManager.cancel(NOTIFICATION_ID);
}
}

我的 logcat 输出

05-12 12:35:35.480: D/AndroidRuntime(27598): Shutting down VM
05-12 12:35:35.480: W/dalvikvm(27598): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
05-12 12:35:35.490: E/AndroidRuntime(27598): FATAL EXCEPTION: main
05-12 12:35:35.490: E/AndroidRuntime(27598): java.lang.RuntimeException: Unable to start service com.zafar.batterynotify.BatteryService@40526a48 with Intent { cmp=com.zafar.batterynotify/.BatteryService }: java.lang.NullPointerException
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2056)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.app.ActivityThread.access$2800(ActivityThread.java:117)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.os.Looper.loop(Looper.java:130)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.app.ActivityThread.main(ActivityThread.java:3691)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at java.lang.reflect.Method.invokeNative(Native Method)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at java.lang.reflect.Method.invoke(Method.java:507)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at dalvik.system.NativeStart.main(Native Method)
05-12 12:35:35.490: E/AndroidRuntime(27598): Caused by: java.lang.NullPointerException
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.content.ComponentName.<init>(ComponentName.java:75)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.content.Intent.<init>(Intent.java:2859)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at com.zafar.batterynotify.Notify.initNotification(Notify.java:24)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at com.zafar.batterynotify.BatteryService.onStartCommand(BatteryService.java:20)
05-12 12:35:35.490: E/AndroidRuntime(27598):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2043)
05-12 12:35:35.490: E/AndroidRuntime(27598):    ... 10 more
05-12 12:35:56.465: D/AndroidRuntime(27706): Shutting down VM
05-12 12:35:56.465: W/dalvikvm(27706): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
05-12 12:35:56.470: E/AndroidRuntime(27706): FATAL EXCEPTION: main
05-12 12:35:56.470: E/AndroidRuntime(27706): java.lang.RuntimeException: Unable to start service com.zafar.batterynotify.BatteryService@4051f2f8 with Intent { cmp=com.zafar.batterynotify/.BatteryService }: java.lang.NullPointerException
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2056)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.app.ActivityThread.access$2800(ActivityThread.java:117)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.os.Looper.loop(Looper.java:130)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.app.ActivityThread.main(ActivityThread.java:3691)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at java.lang.reflect.Method.invokeNative(Native Method)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at java.lang.reflect.Method.invoke(Method.java:507)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at dalvik.system.NativeStart.main(Native Method)
05-12 12:35:56.470: E/AndroidRuntime(27706): Caused by: java.lang.NullPointerException
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.content.ComponentName.<init>(ComponentName.java:75)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.content.Intent.<init>(Intent.java:2859)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at com.zafar.batterynotify.Notify.initNotification(Notify.java:24)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at com.zafar.batterynotify.BatteryService.onStartCommand(BatteryService.java:20)
05-12 12:35:56.470: E/AndroidRuntime(27706):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2043)
05-12 12:35:56.470: E/AndroidRuntime(27706):    ... 10 more

最佳答案

在这一行中:

Intent notificationIntent = new Intent(context, BatteryNotify.class);

上下文null

关于java - 服务无法正常启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10562670/

相关文章:

java - 同步块(synchronized block)会锁定整个对象还是单独锁定方法?

java - 无法从 jsonobject 中提取 jsonarray

java - Apache Kylin Cube 构建失败(使用 mysql JDBC 连接器时)

android - 跨移动选项

java - 在 Android 中禁用短信和电子邮件通知

Activity onCreate 中的 java.util.ConcurrentModificationException

java - 为什么服务器返回错误代码502

java - 无法访问应用程序数据中的 jarfile

java - 如何重置createChooser Intent 中的数据

android - 错误 : File path too long on windows, 保持低于 240 个字符