2012-04-25 17 views
5

私はAndroidプログラミングにとって大きな騒ぎですので、これは簡単な作業であればごめんなさい。私はプッシュ通知用のVogellaプッシュ通知チュートリアル(http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html)にほとんど従っていました。私は他のスタックオーバーフローの質問を読んだことがありますが、通知を受け取ったら意図を開く方法について少し混乱します。プッシュ通知をクリックした後にアクティビティを開くandroid

たとえば、私が通知をウェブサイトに誘導したかったら、どうしたらいいですか? MessageReceivedActivityや別のプロジェクト/クラスの下に一緒に行かなければならないでしょうか?ここで

おかげ

は、私が持っているコードは)あなたが(のhandleMessageを持っているあなたの基本C2DMのための受信機またはクラスで私の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); 

} 

}

答えて

9

あなたは通知クリックでWebサイトを開きたい場合は、この試してみてください。

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

私はプッシュ通知をクリックした後、 "New message received"というメッセージしか表示しません。おそらく何かが、意図を開くために保留中の人に伝える必要がありますか? – Kevin

+0

あなたのコードを通して気にしないでください。 1つの小さなものだけを変えなければならなかった。ありがとう! – Kevin

0

そのextentdベースレシーバのためであります::

以下は、アクティビティ::

を起動するハンドルメッセージのサンプルコードです。 0
@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

は申し訳ありませんが、基本受信機は、メッセージ受信者または登録受信を意味するのでしょうか?私はActivityがActivityを拡張するMessageReceivedActivityの下に行くと仮定しました。しかし、それはBroadcast Receiverを拡張するMessageReceiverの下に行きますか? – Kevin

+0

いくつかのコードを追加できますか? –

+0

自分のコードを含めるように私の質問を編集しました。たとえば、酒のように、通知をクリックするとwww.google.comを開くとしますか?私はインテントでそれを行う方法を理解していますが、どのようにpendingIntentが動作するのかわかりません。 – Kevin

関連する問題