如何在每次打开不同的活动时显示不同的通知?

时间:2017-08-24 16:59:07

标签: android android-intent android-notifications android-broadcast

我正在尝试建立一个肯定应用程序,将通知显示为肯定文本,当用户点击通知时,它应该将其带到活动中,到目前为止我能够按小时显示通知但我不知道如何每小时显示不同的通知,每次都会打开一个不同的活动,因为会有一个随机的肯定列表显示为通知。

编辑: 我的主要活动:

  private void hourly()
       {
        Calendar calender=Calendar.getInstance();
        Intent intent=new Intent(getApplicationContext(),notification_receiver.class);
        PendingIntent pendingintent=PendingIntent.getBroadcast(this,100,intent,PendingIntent.FLAG_UPDATE_CURRENT);
//        calender.setTimeInMillis(System.currentTimeMillis());
////        calender.set(Calendar.HOUR_OF_DAY, 10);
////        calender.set(Calendar.MINUTE, 30);
        alarmmanager=(AlarmManager)getSystemService(ALARM_SERVICE);
        int interval=60000;
        alarmmanager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                interval,
                interval, pendingintent);
        Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();
    }

我的notification_receiver类:

       public class notification_receiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    ArrayList<String> notificationTexts = null;
    notificationTexts.add("This is a nice day"); // this will go to notificationTexts in position 0;
    notificationTexts.add("This is nice morning");
    Random rand = new Random();
    int n = rand.nextInt(notificationTexts.size());
    NotificationManager notificationManager= (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Intent repeating_activity=new Intent(context,repeating_activity.class);
    repeating_activity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent=PendingIntent.getActivity(context,100,repeating_activity,PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder builder=new NotificationCompat.Builder(context)
            .setContentIntent(pendingIntent)
            .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
            .setContentTitle("Affirmation")
            .setContentText(notificationTexts.get(n))
            .setAutoCancel(true);
            notificationManager.notify(100,builder.build());

}

}

1 个答案:

答案 0 :(得分:0)

您已经有了一种显示通知的机制,因此您需要的是一种后端,您可以在其中选择与应用的某个活动相关联的随机文本。

在您的主要活动中,您可以拥有2个列表:

private ArrayList<Srtring> notificationTexts;
private ArrayList<Class> activitiesToStart;

这两个你添加肯定的文本和你想要在列表中相同的位置索引下开始的活动类。

例如:

notificationTexts.add("This is a nice day"); // this will go to notificationTexts in position 0;
activitiesToStart.add(TheNiceDayActivity.class); //this will go to the activitiesToStart also in position 0;

在您已经工作的机制中,当您准备通知时,您只需计算0和任一列表长度之间的随机数,然后从第一个列表中选择文本,从第二个列表中选择活动。要选择相应的元素,请使用list.get(position);

获得活动后,您可以在构建活动时创建通知设置中的PendingIntent。

我还没有尝试过,但它应该让你知道如何做到这一点。

编辑我

0到19之间的随机数(包括19)可用以下公式计算:

Random rand = new Random();
int n = rand.nextInt(20);