2012-05-12 101 views
0

我創建了一個簡單的服務,現在我正在爲此發出通知。我正在寫一個通知類。在寫完所有代碼後,三條線用紅色標出,一個是這個功能getSystemService(ns);在第14行,第二個是這個第getApplicationContext();在第20行,第三個功能與第一個功能相同,但在第31行功能是cancelNotification()功能。這裏是我的完整代碼通知類無法正常工作

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() { 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) 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 = getApplicationContext(); 
     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() { 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
     mNotificationManager.cancel(NOTIFICATION_ID); 
    } 
} 

編輯更新代碼

我的服務類

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(); 
String ns = Context.NOTIFICATION_SERVICE; 
@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(Context.NOTIFICATION_SERVICE); 
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
    return START_STICKY; 
} 

public void onDestroy() { 
    super.onDestroy(); 
    notification.cancelNotification(Context.NOTIFICATION_SERVICE); 
    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 = Context.NOTIFICATION_SERVICE; 
    //Context context = actContext.getApplicationContext(); 
    NotificationManager mNotificationManager = 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(); 
    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 = actContext.getSystemService(ns); 
    mNotificationManager.cancel(NOTIFICATION_ID); 
} 
} 

回答

0

與調用活動或服務來傳遞你的背景下您的並使用它:

public void initNotification(Context actContext) { 
    //... 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = actContext.getSystemService(ns); 
    //... 
    } 

    public void cancelNotification(Context actContext) { 
     //... 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = actContext.getSystemService(ns); 
     //... 
    } 
+0

請參閱我的更新。我改變了它,但仍然不起作用。 Noe紅色下劃線分爲兩行。在第15行getSystemService(ns);僅在括號內的ns下,第二個是在cancelNotification函數行號32中actContext.getSystemService(ns); – 2619

+0

不要評論'String ns = Context.NOTIFICATION_SERVICE;' – breceivemail

+0

是的,現在已經修復了,但現在問題在服務類中。現在,我所調用的函數,即initNotification和cancelNotification都是用紅線單引號。當我將鼠標懸停在此上時,它將initNotification從initNotification(Context)更改爲initNotification(String)。 – 2619

0

不要嘗試使用getApplicationContext(),而是創建MyApplication類,從Application繼承,那麼類中執行以下操作:

public class MyApplication extends Application { 
    private static MyApplication instance; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
     ......... 
    } 

    public static Context getContext() { 
     return instance; 
    } 

之後,你可以使用MyApplication.getContext()任何地方,如果你需要一個上下文,並沒有躺在周圍的Activity