5

Ho codice, e non funziona, quindi chiedo a chiunque di darmi una mano. Ci sono pochissime informazioni su questo argomento specifico.Perché Android ignora la creazione della notifica?

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 (Aware ho scritto male, ma dal momento che questo è come è, im andando con esso)


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 



} 
} 

manifesto


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


Quello dovrebbe essere tutto. Sto cercando di eseguirlo così com'è e non mi sta mostrando nulla. Lo sto eseguendo su un emulatore è che conta davvero.

EDIT: Quando dico che non funziona, voglio dire che non compare nulla. Funziona bene, ma la notifica non si apre mai.

Il problema: enter image description here

Quindi il problema è ridotta a Android solo ignorando la mia notifica. Il problema è che non mi dice perché -_- quindi non posso aggiustarlo. Qualche esperto in materia vede qualcosa di sbagliato nel mio codice per chiamare una notifica? Ha importanza che sia su un emulatore?

risposta

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

E ', almeno per il primo sguardo

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

Se prendo quella via, come devo cambiare 'tag di mio file manifesto'? – Andy

+0

In realtà è possibile rimuovere 'intent.setAction (..)' dalla sezione codice + remove '' dal manifest di Android. –

+0

L'ho appena fatto. Ancora non funziona. Grazie per averlo fatto notare però. È un inizio. – Andy

8

Beh, lezione apprese su Notifiche. Il motivo per cui stavo ottenendo l'errore era perché DEVE essere aggiunto un img, altrimenti non lo mostrerebbe! Tutto il resto che ho avuto era fondamentalmente giusto, ad eccezione di ciò che Vladimir è stato gentilmente in grado di sottolineare. Pubblicando questo qui nel caso in cui altri stiano ricevendo un problema simile, testando solo le notifiche.

22

Mi sono imbattuto nello stesso problema. Se non si specifica un'icona durante la creazione di una "nuova notifica()", la notifica non verrà visualizzata.

+1

Haha, sì. Vorrei che i dottori lo menzionassero. Ma hey, prova ed errore giusto. Ora altre persone lo sanno :) – Andy

0

Questo perché, non si imposta l'icona di notifica. Se si imposta l'icona notificaiton dovrebbe funzionare. Log stesso dice che non è possibile inviare una notifica senza un'immagine.

0

Sembra come ti sei dimenticato di impostare Icona .. È necessario atleast impostare un'icona predefinita ..

Prova questo ..

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 
Problemi correlati