【发布时间】:2016-04-04 12:44:53
【问题描述】:
在上一个问题中,我询问了如何打乱活动列表,选择一个,将其添加到意图并防止重复已访问的活动,我很幸运得到了一位非常友善的绅士的帮助(@PedroFernandes)并解决我的问题,这是该问题的LINK。
在同一件事上,我尝试在通知中实现完全相同的方法,我想要的是在我的应用程序中每天显示一个通知,每次都将用户带到不同的活动。虽然我设法做到了这一点,但我之前的问题仍然存在,activities.remove(0); 从未被触发,并且我不断收到重复,并且列表永远不会为空。
这是我扩展广播接收器的通知:
Notification01.java
public class Notification01 extends BroadcastReceiver{
private static final int NOTIFICATION_ID = 1;
PendingIntent pendingIntent;
Notification notification;
TaskStackBuilder taskStackBuilder;
@Override
public void onReceive(Context context, Intent intent) {
ArrayList<Class> activities = new ArrayList<>();
activities.add(Activity01.class);
activities.add(Activity02.class);
activities.add(Activity03.class);
activities.add(Activity04.class);
activities.add(Activity05.class);
activities.add(Activity06.class);
activities.add(Activity07.class);
activities.add(Activity08.class);
activities.add(Activity09.class);
activities.add(Activity10.class);
if (activities.size()==0){
Toast.makeText(context, "ArrayList Empty", Toast.LENGTH_SHORT).show();
}
Collections.shuffle(activities);
Class activityToShow = activities.get(0);
intent = new Intent(context, activityToShow);
activities.remove(0);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
taskStackBuilder = TaskStackBuilder.create(context);
taskStackBuilder.addParentStack(Activity01.class);
taskStackBuilder.addNextIntent(intent);
pendingIntent = taskStackBuilder.getPendingIntent(1, PendingIntent.FLAG_CANCEL_CURRENT);
notification = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_stat_logo_white)
.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
.setContentTitle("Notification Title")
.setContentText("Notification content")
.setStyle(new NotificationCompat.BigTextStyle().bigText("Notification Big Text"))
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.build();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notification);
}
}
感谢所有帮助,我还应该提到,我需要这个来坚持重启和应用程序关闭,我不确定我是否应该使用 SharedPreferences 或 Receivers ??!!我对此很陌生,没有任何 Java 经验。
非常感谢。
编辑:
感谢@Titus 的回答,我从onReceive 方法中得到了列表,但是当我运行调试时,我注意到activities.remove(0); 确实被调用并且列表的大小变为9 而不是原来的10,但是问题是,当我点击通知并进入随机选择的活动时,我回到调试,列表的大小又回到了 10。
阅读后我发现我可以使用 GSON 之类的东西将 ArrayList 存储在 sharedPreferences 中,这样每次更改都会持续存在应用程序关闭并重新启动,但我承认我无法理解如何使用这些方法。
请大家帮忙,谁能帮帮我?这是我完成应用程序的唯一障碍。
再次感谢。
【问题讨论】:
标签: java android random collections notifications