2016-04-13 3 views
1

Я не могу получить NotificationManager's Notifiy принять мои аргументы. Предполагается, что метод принимает 3 аргумента.Почему NotificationManager не принимает мое уведомление

String  tag 
int   id 
Notification notification 

enter image description here

Для построения уведомления, я использую NotificationCompat класс, но я пытался даже Notification.Builder.

import android.app.Notification; 
import android.support.v4.app.NotificationCompat; 

Что касается моей конфигурации сборки, это выглядит следующим образом:

compileSdkVersion 23 
buildToolsVersion "23.0.2" 

minSdkVersion 14 
targetSdkVersion 21 

EDIT: Код транскрипт:

import android.app.Notification; 
import android.support.v4.app.NotificationCompat; 

private void showNotification(Context context, String category, String title, String text, int tag, boolean ongoing) 
{ 
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

    Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, new Random().nextInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
    builder.setContentTitle(title); 
    builder.setContentText(text); 
    builder.setContentIntent(pendingIntent); 
    builder.setOngoing(ongoing); 
    builder.setSmallIcon(R.drawable.ic_launcher); 

    Notification notification = builder.build(); 
    notificationManager.showNotification(context, category, title, text, new Random().nextInt(), ongoing); 
    notificationManager.notify(null, 0, notification); 
} 
+2

где находится notificationManager инициализации? –

+1

Вы используете 'NotificationManagerCompat'? –

+2

Можете ли вы разместить код как текст вместо изображения, пожалуйста, –

ответ

1

Используйте Compat версию NotificationManagerCompat, инициализировать его notificationManager = NotificationManagerCompat.from(getApplicationContext());. И после этого, уведомить менеджер notificationManager.notify(null, 0, notification);

import android.support.v4.app.NotificationCompat; 

... 

private NotificationManagerCompat notificationManager; 

... 

// onCreate 
notificationManager = NotificationManagerCompat.from(getApplicationContext()); 

... 

// Somewhere in your code 
Notification notification = new NotificationCompat.Builder(this) 
    .setContentTitle("I'm a title") 
    .setContentText("Some text") 
    .setSmallIcon(R.drawable.ic_notification) 
    .setContentIntent(pendingIntent) 
    .build(); 

notificationManager.notify(null, 0, notification); 
+0

Я уже использую NotificationCompat.Builder –

+1

Вы используете 'NotificationManager', но вы должны использовать' NotificationManagerCompat'. – Exaqt

+0

Действительно, вы правы, я пропустил это, извините :) Я писал это на основе официального руководства. Возможная ошибка там, ссылаясь на обычный 'NotificationManger' http://developer.android.com/training/notify-user/build-notification.html –

2

оповестить объект

эта часть сообщения «ошибка» намекает, что ваш notificationManager является объектом, и что вы объявили его как этот

Object notificationManager = 
      getSystemService(Context.NOTIFICATION_SERVICE); 

То, что вы должны иметь это

NotificationManager notificationManager = (NotificationManager) 
      getSystemService(Context.NOTIFICATION_SERVICE); 
+0

Приятный улов на этом –

+0

Я уже объявлял notificationManager типа NotificationManager, извините за то, что не включен в это изображение. –

1

Если вы используете NotificationCompat, тогда вам необходимо использовать NotificationManagerCompat. Если вы используете Notification, вы используете NotificationManager.

Эти методы должны совпадать с объектом, который вы пытаетесь использовать

+1

Я не думаю, что это правда. Я использую 'NotificationCompat.Builder' с регулярным' NotificationManager' и отлично работает –

+0

Проблема решена, спасибо. Возможно, в документации есть ошибка, она ссылается на обычный 'NotificationManager': http://developer.android.com/training/notify-user/build-notification.html –

1

Проверка импорта. Это то, что я использовал.

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.media.RingtoneManager; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 

Для функции -

private void createNotification(String idString, String title, String body, boolean isSound, 
            boolean isVibration, PendingIntent intent) { 
     Context context = getBaseContext(); 
     Bitmap mIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.styfi_largenotify); 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.styfi_notify) 
       .setColor(Color.TRANSPARENT) 
       .setContentTitle(title) 
       .setLargeIcon(mIcon) 
       .setContentText(body) 
       .setContentIntent(intent) 
       .setLights(Color.CYAN, 3000, 3000) 
       .setAutoCancel(true); 

     if (isSound) 
      mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
     if (isVibration) 
      mBuilder.setVibrate(new long[] { 500, 500}); 

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

     String actual = ""; 
     for (int i = 0; i < idString.length(); i++) { 
      char c = idString.charAt(i); 
      int value; 
      try{ 
       value = Integer.parseInt(String.valueOf(c)); 
      } catch (Exception e) { 
       value = Math.abs(c - 'a' + 1); 
      } 
      actual += String.valueOf(value); 
      if (BuildConfig.DEBUG) 
       Log.d(TAG, "char = [" + c + "], value = [" + value + "], actual = [" + actual + "]"); 
     } 

     BigInteger idBigInt = new BigInteger(actual); 
     int id = Math.abs(idBigInt.intValue()); 

     if (BuildConfig.DEBUG) 
      Log.d(TAG, "idLong = [" + idBigInt +"], id = [" + id + "]"); 
     mNotificationManager.notify(id, mBuilder.build()); 
    } 
+0

Проблема уже решена, ошибка заключалась в использовании' NotificationCompat .Builder' и старый 'NotificationManager'. Исправлено это для 'NotificationCompatManager'. –

Смежные вопросы