5

Tengo código, y simplemente no funciona, entonces le pido a alguien que me ayude. Hay muy poca información sobre este asunto específico.¿Por qué Android ignora la creación de la Notificación?

MainActivity


public class MainActivity extends Activity { 
public final int PENDING_INTENT_ID = 8; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button clickity = (Button)findViewById(R.id.alarm_button); 
    clickity.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Calendar now = Calendar.getInstance(); 
      now.add(Calendar.SECOND, 20); 

      //Create a new PendingIntent used by the Alarm when it activates 
      Intent intent = new Intent(v.getContext(), AlarmReciever.class); 
      intent.setAction("SOME_AWESOME_TRIGGER_WORD"); 
      intent.putExtra("info", "This String shows that the info is actually sent correctly"); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(v.getContext(), PENDING_INTENT_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT|Intent.FILL_IN_DATA); 

      //Then Create the alarm manager to send this pending intent and set the date to go off 
      AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), pendingIntent); 

     } 
    }); 

} 

AlarmReciever (Consciente te sueltan mal, pero ya que eso es lo que es, me voy con él)


public class AlarmReciever extends BroadcastReceiver{ 

@Override 
public void onReceive(Context c, Intent arg1) { 

    //get a reference to NotificationManager 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) c.getSystemService(ns); 

    //Instantiate the notification 

    CharSequence tickerText = "Hello"; 
    long when = System.currentTimeMillis(); 
    Notification.Builder builder = new Notification.Builder(c) 
           .setTicker(tickerText) 
           .setWhen(when) 
           .setContentTitle(arg1.getStringExtra("info")) 
           .setContentText("Success!!") 
           .setAutoCancel(true); 
    Notification notification = builder.getNotification(); 
    mNotificationManager.notify(0, notification);//note the first argument, the ID should be unique 



} 
} 

Manifiesto


<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver 
     android:name="com.testproject.AlarmReciever" 
     android:enabled="true" 
     android:exported="false" > 
     <intent-filter> 
    </receiver> 

</application> 


Eso debería ser todo. Estoy tratando de ejecutarlo tal como está y no me está mostrando nada. Lo estoy ejecutando en un emulador es lo que realmente importa.

EDIT: Cuando digo que no funciona, quiero decir que no aparece nada. Funciona bien, pero la Notificación nunca aparece.

El problema: enter image description here

Así que la cuestión se reduce a Android simplemente haciendo caso omiso de mi notificación. El problema es que no me dice por qué -_- así que no puedo arreglarlo. ¿Algún experto en el tema ve algo mal con mi código para llamar una notificación? ¿Importa que esté en un emulador?

Respuesta

2
Intent intent = new Intent(v.getContext(), AlarmReciever.class); 
// intent.setAction("SOME_AWESOME_TRIGGER_WORD"); replace to: 
intent.setAction("com.testproject.SOME_AWESOME_TRIGGER_WORD"); 

Es al menos para el primer aspecto

UPD:

long firstTime = SystemClock.elapsedRealtime(); 

AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, /* INTERVAL IN MS */ 20 * 1000, /* PendingIntent */ intent); 
+0

Si tomo esa distancia, ¿cómo debería cambiar la etiqueta de mi archivo de manifiesto '' ? – Andy

+0

En realidad, puedes eliminar la sección 'intent.setAction (..)' del código + eliminar '' del manifiesto de Android. –

+0

Acabo de hacer. Aún no funciona. Gracias por señalarlo. Es un comienzo. – Andy

8

Bueno, lección aprendida en las notificaciones. La razón por la que recibí el error fue porque DEBE agregarse una img, si no, ¡no se mostrará! Todo lo demás que tenía era básicamente correcto, con la excepción de lo que Vladimir fue gentilmente capaz de señalar. Publicando esto aquí en caso de que otros obtengan un problema similar simplemente probando las notificaciones.

22

Me encontré con el mismo problema. Si no especifica un icono al crear una "Notificación nueva()", la notificación no aparecerá.

+1

Jaja, sí. Deseo que los doctores lo mencionen. Pero bueno, prueba y error, ¿verdad? Ahora otras personas saben :) – Andy

0

Esto se debe a que no está configurando el icono de notificación. Si configura el ícono de notificación, debería funcionar. El propio registro indica que no puede enviar una notificación sin una imagen.

0

parece que se le olvidó preparar Icono .. Es necesario establecer al menos un icono predeterminado ..

Prueba esto ..

Notification.Builder builder = new Notification.Builder(c) 
         .setTicker(tickerText) 
         .setWhen(when) 
         .setContentTitle(arg1.getStringExtra("info")) 
         .setContentText("Success!!") 
         .setAutoCancel(true) 
         .setSmallIcon(R.drawable.ic_launcher); //<--- this one 
Cuestiones relacionadas