1

我试图在用户单击按钮时的特定时间设置通知。无法在不同时间获得多个通知

像这样:

// make this duration fifteen minutes before startTime 
         long futureInMillis = SystemClock.elapsedRealtime() + Long.parseLong(holder.handlerGapTV.getText().toString()); 
         AlarmManager alarmManager = (AlarmManager) holder.itemView.getContext().getSystemService(Context.ALARM_SERVICE); 
         ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 

         for (int i=0; i<10; ++i) { 
          Intent notificationIntent = new Intent(holder.itemView.getContext(), NotificationARBroadcastReceiver.class); 
          notificationIntent.putExtra(NotificationARBroadcastReceiver.NOTIFICATION, holder.getNotification(i)); 
          PendingIntent pendingIntent = PendingIntent.getBroadcast(holder.itemView.getContext(), 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
          alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); 
          intentArray.add(pendingIntent); 
         } 

Long.parseLong(holder.handlerGapTV.getText().toString())已经计算公式为:

try { 
      Date date3 = todayTimeDateFormat.parse(todayTimeDate); 
      Date date4 = todayTimeDateFormat.parse(newTime); 

      holder.handlerGap = date4.getTime() - date3.getTime(); 
      holder.handlerGapTV.setText(String.valueOf(holder.handlerGap)); 
      holder.handlerGapTV.setVisibility(View.INVISIBLE); 
      Log.d("handlerGapTV.getText()", holder.handlerGapTV.getText().toString()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

这里的getNotification()

private Notification getNotification(int repeat) { 
      mBuilder = 
        new NotificationCompat.Builder(itemView.getContext()) 
          .setSmallIcon(R.mipmap.app_icon_1) 
          .setContentTitle("Notif title") 
          .setContentText("Notif text"); 

      Intent resultIntent = new Intent(itemView.getContext(), AcceptedRequest.class); 
      // Because clicking the notification opens a new ("special") activity, there's 
      // no need to create an artificial back stack. 
      PendingIntent resultPendingIntent = 
        PendingIntent.getActivity(
          itemView.getContext(), 
          repeat, 
          resultIntent, 
          PendingIntent.FLAG_UPDATE_CURRENT 
        ); 

      mBuilder.setContentIntent(resultPendingIntent); 
      return mBuilder.build(); 
     } 

和这里的NotificationARBroadcastReceiver.java

public class NotificationARBroadcastReceiver extends BroadcastReceiver { 

    public static String NOTIFICATION = "notification"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Random random = new Random(); 
     int m = random.nextInt(9999 - 1000) + 1000; 

     NotificationManager mNotifyMgr = 
       (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 

     Notification notification = intent.getParcelableExtra(NOTIFICATION); 
     notification.defaults |= Notification.DEFAULT_SOUND; 
     notification.defaults |= Notification.DEFAULT_VIBRATE; 
     mNotifyMgr.notify(m, notification); 

    } 
} 

问题Long.parseLong(holder.handlerGapTV.getText().toString())对于CardView上的按钮,并假设如果100秒为卡1的按钮,然后它是65对卡2的按钮,如果我按卡2按钮第一和卡2按钮不同之后,根据卡2的时间设置通知,即100,并且卡1的时间通知从不显示!

我想是显示每个通知是否设置后100秒或65

请帮我这个。

回答

0

那么,改变从这个代码:

long futureInMillis = SystemClock.elapsedRealtime() + Long.parseLong(holder.handlerGapTV.getText().toString()); 
         AlarmManager alarmManager = (AlarmManager) holder.itemView.getContext().getSystemService(Context.ALARM_SERVICE); 
         ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 

         for (int i=0; i<10; ++i) { 
          Intent notificationIntent = new Intent(holder.itemView.getContext(), NotificationARBroadcastReceiver.class); 
          notificationIntent.putExtra(NotificationARBroadcastReceiver.NOTIFICATION, holder.getNotification(i)); 
          PendingIntent pendingIntent = PendingIntent.getBroadcast(holder.itemView.getContext(), 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
          alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); 
          intentArray.add(pendingIntent); 
         } 

这样:

int m = (int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE); 

         // make this duration fifteen minutes before startTime 
         long futureInMillis = SystemClock.elapsedRealtime() + Long.parseLong(holder.handlerGapTV.getText().toString()); 
         ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 

         Intent notificationIntent = new Intent(holder.itemView.getContext(), NotificationARBroadcastReceiver.class); 
         notificationIntent.putExtra(NotificationARBroadcastReceiver.NOTIFICATION, holder.getNotification()); 
         PendingIntent pendingIntent = PendingIntent.getBroadcast(holder.itemView.getContext(), m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
         AlarmManager alarmManager = (AlarmManager) holder.itemView.getContext().getSystemService(Context.ALARM_SERVICE); 
         alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); 

为我工作!