在之前的一个问题中,我询问了如何改变活动列表,选择一个,将其添加到意图中并防止重复已经访问过的活动,我很幸运能得到一位非常优秀的绅士(@PedroFernandes)的帮助并解决了我的问题,这是该问题的LINK。
关于同样的问题,我尝试在Notification中实现完全相同的方法,我想要的是每天在我的应用程序中显示一个Notification,每次都将用户带到另一个Activity。虽然我设法实现了这个目标,但我之前的问题仍然存在,activities.remove(0);
从未被触发,并且我一直在重复,而且列表永远不会出现空白。
这是我的扩展BroadcastReceiver的通知:
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 中,这样每个更改都会持续存在app关闭并重新启动,但我承认我无法理解如何使用这些方法。
请大家,有人可以帮我吗?这是阻止我最终确定应用程序的唯一方法。
再次感谢。
答案 0 :(得分:0)
您可以通过创建activities
变量(类变量)来解决此问题。就像现在一样,每次调用onReceive(...)
方法时都会生成列表,这意味着您不会重复使用已删除之前启动的活动的列表。总是使用完整列表。
例如:
public class Notification01 extends BroadcastReceiver{
...
ArrayList<Class> activities = new ArrayList<>(Arrays.asList(Activity01.class,Activity02.class, ..., Activity10.class));
@Override
public void onReceive(Context context, Intent intent) {
...
}
}
此外,在致电activities.get(0)
或activities.remove(0)
之前,您需要确保该列表不为空。