2014-12-12 3 views
0

3 가지 유형의 알림이 있습니다. 유형에 따라 다른 화면이 열립니다. 이것을 위해 나는 매개 변수를 의도에 전달합니다. 그런 다음 그는 의도를 가졌습니다. 문제는 모든 알림에 마지막으로 보낸 인 텐트가 포함되어 있다는 것입니다. 그것은 플래그를 사용하기 때문에입니다. PendingIntent.FLAG_UPDATE_CURRENT 다른 플래그를 시도했지만 작동하지 않습니다. 나는 각자가 그 의도를 담고 있음을 알 필요가있다. 알림을 통해 의도를 제대로 전송할 수 없습니다.

public class GCMIntentService extends GCMBaseIntentService { 
    public static int ID_NITIF =1; 

    public GCMIntentService() { 
     super(SENDER_ID); 
    } 

    @Override 
    protected void onMessage(Context context, Intent intent) { 
     String title = intent.getStringExtra("title"); 
     String message = intent.getStringExtra("content"); 
     int groupid = Integer.parseInt(intent.getStringExtra("group_id")); 
     generateNotification(context,title, message,groupid,intent); 
    } 
.............. 
    private void generateNotification(Context context, String title, String message,int groupid,Intent data) { 

     NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); 
     Intent intent = new Intent(context,MyActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
       | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

     if (groupid==1){ 
      intent.putExtra("guest",data.getStringExtra("guest")); 
      intent.putExtra("hotel",data.getStringExtra("hotel")); 
      intent.putExtra("room",data.getStringExtra("room")); 
     } 
     if (groupid==5){ 
      intent.putExtra("hotel",data.getStringExtra("hotel")); 
     } 
     if (groupid==4){ 
      intent.putExtra("hotel",data.getStringExtra("hotel")); 
      intent.putExtra("guest",data.getStringExtra("guest")); 
     } 

     intent.putExtra("group_id",groupid); 
     Log.d("mylogout","group_id: "+groupid); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     Notification notification = new NotificationCompat.Builder(context) 
       .setContentIntent(pendingIntent) 
       .setSmallIcon(R.drawable.ic_stat_gcm) 
       .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm)) 
       .setTicker("Новое сообщение") 
       .setWhen(System.currentTimeMillis()) 
       .setAutoCancel(true) 
       .setContentTitle(title) 
       .setContentText(message) 
       .build(); 
     notificationManager.notify(ID_NITIF++, notification); 
    } 
} 

과에서 onCreate()에서 MyActivity

public void onNewIntent(Intent intent){ 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     Bundle arguments; 
     Fragment fragment; 
     String guest; 
     Bundle extras = intent.getExtras(); 
     if(extras != null){ 
      if(extras.containsKey("group_id")) 
      { 
       int msg = extras.getInt("group_id"); 
       String hotel = extras.getString("hotel"); 
       switch (msg){ 
        case 5: 
         fragment = new PagerLogbookContainer(); 
         arguments = new Bundle(); 
         arguments.putString(ARGUMENT_PAGE_HOTEL, hotel); 
         fragment.setArguments(arguments); 
         fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
         fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 
         setTitle(hotel); 
         break; 
        case 1: 
         guest = extras.getString("guest"); 
         String room = extras.getString("room"); 
         fragment = new Guest(); 
         arguments = new Bundle(); 
         arguments.putString("guestid", guest); 
         arguments.putString("hotel", hotel); 
         arguments.putString("room",room); 
         fragment.setArguments(arguments); 
         fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
         fragmentManager.beginTransaction().replace(R.id.container, fragment, "guest").commit(); 
         break; 
        case 4: 
         guest = extras.getString("guest"); 
         fragment = new Survey(); 
         arguments = new Bundle(); 
         arguments.putString("guestid", guest); 
         arguments.putString("hotel", hotel); 
         fragment.setArguments(arguments); 
         fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
         fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 
         break; 
       } 
      } 

에서

onNewIntent(getIntent()); 

답변

0

나는 SOLU 발견 . 일주일 동안 아무도 도울 수 없었습니다. 당신이 의도에 행동을 추가하고자하는 각 알림에 저장된 데이터에 intent.setAction("some");

0

가 도움이 될 수도 코드를 시도 전체 당신

public void onNewIntent(Intent intent){ 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    Bundle arguments; 
    Fragment fragment; 
    String guest; 
    Bundle extras = intent.getExtras(); 
    if(extras != null){ 
     if(extras.containsKey("group_id")) 
     { 
      int msg = extras.getInt("group_id"); 
      String hotel = extras.getString("hotel"); 
      displayView(int msg) 
     } 
    public void displayView(int msg) { 

    switch (msg) { 
    case 5: 
     fragment = new PagerLogbookContainer(); 
      arguments = new Bundle(); 
      arguments.putString(ARGUMENT_PAGE_HOTEL, hotel); 
     break; 
    case 1: 
      guest = extras.getString("guest"); 
      String room = extras.getString("room"); 
      fragment = new Guest(); 
      arguments = new Bundle(); 
      arguments.putString("guestid", guest); 
      arguments.putString("hotel", hotel); 
      arguments.putString("room",room); 
     break; 
    case 4: 
     guest = extras.getString("guest"); 
     fragment = new Survey(); 
     arguments = new Bundle(); 
     arguments.putString("guestid", guest); 
     arguments.putString("hotel", hotel); 
     break; 

    default: 
     break; 
    } 

    if (fragment != null) { 

      fragment.setArguments(arguments); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, fragment).commit(); 

    } 
} 
+0

감사하지만 질문은 아닙니다. 모든 것이 잘 작동합니다. 문제는 각각의 새로운 알림이 과거를 덮어 쓰는 것입니다. 첫 번째 알림을 보내면 손님 중 두 번째 손님이 남았습니다. 그 중 하나를 클릭하면 "손님이 왼쪽"이라는 단편이 열립니다. 이것이 두 번째 알림이 전자 메일에 있었던 것을 차단 한 이유입니다. 활동 자체가 알림에서 잘못된 데이터를 사용합니다. –

관련 문제