2012-04-25 19 views
5

Sono un enorme noob alla programmazione Android, quindi mi dispiace se questo è un compito semplice. Ho seguito praticamente il tutorial di notifica push di Vogella per le notifiche push (http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html). Ho letto alcune altre domande sull'overflow dello stack, ma sono un po 'confuso su come aprire un intent una volta ricevuta la notifica.Attività di apertura dopo aver fatto clic su notifica push android

Ad esempio, se volessi che la notifica mi portasse su un sito Web, come funzionerebbe? Dovrebbe andare sotto il mio MessageReceivedActivity o un altro progetto/classe tutti insieme?

Grazie

Ecco il codice che ho per il mio C2DMMessageReceiver

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    Log.w("C2DM", "Message Receiver called"); 
    if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) { 
     Log.w("C2DM", "Received message"); 
     final String payload = intent.getStringExtra("payload"); 
     Log.d("C2DM", "dmControl: payload = " + payload); 
     // TODO Send this to my application server to get the real data 
     // Lets make something visible to show that we received the message 
     createNotification(context, payload); 

    } 
} 

public void createNotification(Context context, String payload) { 
    NotificationManager notificationManager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_launcher, 
      "Message received", System.currentTimeMillis()); 
    // Hide the notification after its selected 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    //adding LED lights to notification 
    notification.defaults |= Notification.DEFAULT_LIGHTS; 

    Intent intent = new Intent(context, MessageReceivedActivity.class); 
    intent.putExtra("payload", payload); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
      intent, 0); 
    notification.setLatestEventInfo(context, "Message", 
      "New message received", pendingIntent); 
    notificationManager.notify(0, notification); 

} 

}

risposta

9

se si desidera aprire un sito web su di notifica click provare questo:

public void createNotification(Context context, String payload) { 
     NotificationManager notificationManager = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = new Notification(R.drawable.ic_launcher, 
       "Message received", System.currentTimeMillis()); 
     // Hide the notification after its selected 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     //adding LED lights to notification 
     notification.defaults |= Notification.DEFAULT_LIGHTS; 

     Intent intent = new Intent("android.intent.action.VIEW", 
     Uri.parse("http://my.example.com/")); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
       intent, 0); 
     notification.setLatestEventInfo(context, "Message", 
       "New message received", pendingIntent); 
     notificationManager.notify(0, notification); 

    } 
+0

Quando faccio questo, dopo aver fatto clic sulla mia notifica push, vedo solo il messaggio "Nuovo messaggio ricevuto". Forse qualcosa deve dire al PendingIntent di aprire l'intento? – Kevin

+0

Nevermind, capito attraverso il tuo codice. Dovevo solo cambiare 1 piccola cosa. Grazie! – Kevin

0

Nel vostro ricevitore base per c2dm o la classe il che ricevitore di base extentd si dispone di un handleMessage() ::

Di seguito è riportato il codice di esempio per il messaggio di handle che avvia l'attività ::

@Override 
    protected void handleMessage(Context context, Intent intent) { 
     String regId = C2DMessaging.getRegistrationId(context); 
     String logKey = this.getClass().getSimpleName(); 
     String title=""; 
     String message=""; 
     if (regId!= null) { 
      if (intent.hasExtra(Constants.TITLE)) { 
       title = intent.getStringExtra(Constants.TITLE); 
      } 
      if(intent.hasExtra(Constants.MESSAGE)){ 
       message = intent.getStringExtra(Constants.MESSAGE); 
      } 
      // TODO Send this to my application server to get the real data 
      // Lets make something visible to show that we received the message 
      if(!title.equals("") && !message.equals("")) 
       createNotificationForMsg(context,title,message); 
     } 
    } 

    @Override 
    public void createNotificationForMsg(Context context,String title,String message) { 
     final String logKey = this.getClass().getSimpleName(); 

     try { 
      NotificationManager notificationManager = (NotificationManager) context 
        .getSystemService(Context.NOTIFICATION_SERVICE); 
      Notification notification = new Notification(R.drawable.icon, 
        "update(s) received", System.currentTimeMillis()); 
      // Hide the notification after its selected 
      notification.flags |= Notification.FLAG_AUTO_CANCEL; 
      //adding sound to notification 
      notification.defaults |= Notification.DEFAULT_SOUND;    

       Intent intent = new Intent(context, YourAlertActivity.class); 

       if(Constants.LOG)Log.d(logKey, Constants.TITLE +": "+ title +" , "+Constants.MESSAGE+": "+message); 
       intent.putExtra(Constants.TITLE, title); 
       intent.putExtra(Constants.MESSAGE, message); 

       PendingIntent pendingIntent = PendingIntent.getActivity(context, Calendar.getInstance().get(Calendar.MILLISECOND), intent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); 
       notification.setLatestEventInfo(context, "Castrol", 
         title+"update Received", pendingIntent); 
       notificationManager.notify(Calendar.getInstance().get(Calendar.MILLISECOND), notification); 



     } catch (Exception e) { 
//   MessageReceivedActivity.view.setText("createNotificationFor Msg: " 
//     + e.toString()); 
     } 
    } 
+1

dispiace ma significa ricevitore base del destinatario Messaggio o Registrazione del ricevitore? Supponevo che l'attività sarebbe passata sotto MessageReceivedActivity che estende Activity. Ma andrebbe sotto MessageReceiver che estende Broadcast Receiver? – Kevin

+0

puoi aggiungere un po 'del tuo codice? –

+0

Ho modificato la mia domanda per includere il mio codice. Ad esempio, ad esempio, voglio che www.google.com venga aperto facendo clic sulla notifica? Capisco come farlo con Intent, non so come funziona PendingIntent – Kevin

Problemi correlati