2012-01-27 18 views
10

Próbuję dostać powiadomienie o pomyślnym przesłaniu z ASyncTask do pracy przez cały dzień. Nie otrzymuję żadnych błędów z mojego obecnego kodu, ale nie mogę wyświetlić powiadomienia na pasku powiadomień (lub nigdzie indziej). Nie otrzymuję wiadomości w LogCat i żadne powiadomienie nie pojawia się na pasku powiadomień. To jest mój kod:Powiadomienie o Androidzie nie działa

Notification mNotification = new Notification(icon, tickerText, when); 

CharSequence contentTitle = "upload completed."; 
CharSequence contentText = "upload completed."; 

Intent notificationIntent = new Intent(context, CastrActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_NO_CREATE); 
mNotification.contentIntent = contentIntent; 
mNotification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(NOTIFICATION_ID, mNotification); 

Jest to wywoływane z metody onPostExecute() zadania ASyncTask. Jestem trochę zdezorientowany z części PendingIntent, szczerze mówiąc. Jakiekolwiek wyjaśnienie tego, co podejrzewam, że jest niepoprawnym kodem, byłoby bardzo docenione.

Odpowiedz

4

Stworzyłem klasę pokazać Uwagi:

public class NotificationData { 

    public static NotificationManager mNotificationManager; 
    public static int SIMPLE_NOTFICATION_ID; 
    private Context _context; 

    public NotificationData(Context context) { 
     _context = context; 
    } 

    public void clearNotification() { 
     mNotificationManager.cancel(SIMPLE_NOTFICATION_ID); 
    } 

    public void SetNotification(int drawable, String msg, String action_string, Class cls) { 
     mNotificationManager = (NotificationManager) _context.getSystemService(Context.NOTIFICATION_SERVICE); 
     final Notification notifyDetails = new Notification(drawable, "Post Timer", System.currentTimeMillis()); 
     long[] vibrate = { 100, 100, 200, 300 }; 
     notifyDetails.vibrate = vibrate; 
     notifyDetails.ledARGB = 0xff00ff00; 
     notifyDetails.ledOnMS = 300; 
     notifyDetails.ledOffMS = 1000; 
    // notifyDetails.number=4; 
     notifyDetails.defaults =Notification.DEFAULT_ALL; 
     Context context = _context; 
     CharSequence contentTitle = msg; 
     CharSequence contentText = action_string;  
     Intent notifyIntent = new Intent(context, cls); 
    // Bundle bundle = new Bundle(); 
    // bundle.putBoolean(AppConfig.IS_NOTIFICATION, true); 
     notifyIntent.putExtras(bundle); 
     PendingIntent intent = PendingIntent.getActivity(_context, 0,notifyIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); 
     notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); 
     mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);   
    } 
} 

Jak korzystać z tej klasy:

NotificationData notification; //create object 
notification = new NotificationData(this); 
notification.SetNotification(R.drawable.notification, "Notification Title", "Click to open", YourClassName.class); 

Dodaj pozwolenie android.permission.VIBRATE

+0

Przykro mi, ale czym jest AppConfig? Czy istnieje biblioteka, którą muszę uwzględnić, aby ją wykorzystać? Eclipse nie wydaje się o tym wiedzieć, jeśli tak jest, musiałbym dodać go do mojej ścieżki budowania. – Carnivoris

+0

Appconfig jest klasą, a IS_NOTIFICATION jest statycznym członkiem, możesz usunąć ten wiersz Bundle bundle = new Bundle(); bundle.putBoolean (AppConfig.IS_NOTIFICATION, true); notifyIntent.putExtras (bundle); –

+0

Niestety, nadal nie otrzymuję powiadomienia. Wołam to z metody onPostExecute() klasy ASyncTask. Potwierdzam, że ASyncTask jest kompletny przez wiadomość w LogCat, ale nie dostaję powiadomień wysłanych na pasek powiadomień. – Carnivoris

2

Spróbuj tego:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

int icon = R.drawable.icon;  // icon from resources 
CharSequence tickerText = "Any thing";    // ticker-text 
long when = System.currentTimeMillis();   // notification time 
Context context21 = getApplicationContext();  // application Context 
CharSequence contentTitle = "Anything"; // expanded message title 
CharSequence contentText = (CharSequence) extras.get("message");  // expanded message text 

Intent notificationIntent = new Intent(this, MainStart.class); 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

// the next two lines initialize the Notification, using the configurations above 
Notification notification = new Notification(icon, tickerText, when); 
notification.defaults |= Notification.DEFAULT_VIBRATE; 
notification.defaults |= Notification.DEFAULT_LIGHTS; 
notification.defaults |= Notification.DEFAULT_SOUND; 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 
/* long[] vibrate = { 0, 100, 200, 300 }; 
notification.vibrate = vibrate; 
notification.ledARGB = Color.RED; 
notification.ledOffMS = 300; 
notification.ledOnMS = 300;*/ 
notification.setLatestEventInfo(context21, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(Constants.NOTIFICATION_ID, notification); 
+0

Mam podobne problemy z tym, co miałem wcześniej. Powiadomienie o intencjiIntent = new Intent (this, CastrRecorder.class); Linia zostanie oznaczona przez Eclipse i jedynym rozwiązaniem jest usunięcie argumentów. Jest to również wywoływane w klasie, która rozszerza funkcję ASyncTask, a funkcja getActivity() nie działa. – Carnivoris

2

Inną rzeczą jest, aby spróbować, aby upewnić się manifest zawiera

<permission android:name="android.permission.STATUS_BAR_SERVICE" android:protectionLevel="signature" /> 

także kopalnia zdawały się ignorować kolejne powiadomienia o tym samym NOTIFICATION_ID.

30

Choć problem jest rozwiązany, po prostu pisać jak mi rozwiązać mój problem, że zgłoszenie nie było widać, być może to pomoże inni ludzie czytając odpowiedzi:

w moim budynku powiadomień mi brakowało Ikona. Gdy tylko dodałem coś takiego, jak setSmallIcon(R.drawable.ic_launcher), pojawiło się powiadomienie.

+0

dostał dokładnie ten sam problem .. rozwiązany, dzięki! – akhyar

+0

Tak, zadziałało też dla mnie. Pierwsza praca z powiadomieniami.Wielkie dzięki! –

+0

Dokładnie! Wielkie dzięki! – Alexandr

0

Dla mnie to się działo i nie miałem pojęcia, dlaczego tak się stało, ale problem polegał na tym, że ustawiona przeze mnie ikona była zbyt duża, więc dała mi jakiś losowy błąd.

Powiązane problemy