Уведомление Android не работает - PullRequest
10 голосов
/ 27 января 2012

Я пытался получить уведомление об успешной загрузке из ASyncTask для работы весь день.Я не получаю никаких ошибок из моего текущего кода, но не могу отобразить уведомление в панели уведомлений (или где-либо еще).Я не получаю сообщений в LogCat, и никакое уведомление не появляется в панели уведомлений.Это мой код:

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);

Это вызывается из метода onPostExecute () объекта ASyncTask.Я немного запутался в части PendingIntent, если честно.Любое разъяснение того, что я подозреваю, является неправильным кодом, будет с благодарностью.

Ответы [ 5 ]

30 голосов
/ 06 февраля 2013

Даже если ваша проблема решена, я просто напишу, как я решил мою проблему, что уведомление не показывалось, возможно, это может помочь другим людям читать ответы:

В моем здании уведомлений мне не хватало иконки. Как только я добавил что-то вроде setSmallIcon(R.drawable.ic_launcher), появилось уведомление.

4 голосов
/ 27 января 2012

Я создал класс для отображения уведомлений:

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);        
    }
}

Как использовать этот класс:

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

Разрешение на добавление android.permission.VIBRATE

2 голосов
/ 03 мая 2012

Еще одна вещь, которую нужно попробовать, - убедиться, что ваш манифест содержит

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

Кроме того, мои сообщения, похоже, игнорировали последовательные уведомления с тем же NOTIFICATION_ID.

2 голосов
/ 27 января 2012

Попробуйте это:

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 голосов
/ 24 апреля 2016

Для меня это продолжалось, и я понятия не имел, почему, но проблема заключалась в том, что значок, который я установил, был слишком большим, поэтому он давал мне случайную ошибку.

...