由于片段旨在封装逻辑,我决定将BroadReceiver逻辑放在我自己的片段中。
首先,我设置了一个类似于ApiDemos中显示的警报:
Intent intent = new Intent(getActivity(),OnAirPresentBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
OnAirPresentBroadcastReceiver接收广播,此广播的目的是更新片段的UI。我被困在这里 - 它有可能吗?怎么样?
答案 0 :(得分:1)
您可以从Receiver中将另一个意图发布到您的活动中。从活动中,您可以使用FragmentManager访问Fragment。
Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
notificationIntent.putExtra("extra", "extra");
context.startActivityForResult(notificationIntent, 0);
你会在你的活动中得到它:
@Override
protected void onNewIntent(Intent intent)
{
handleNotification(intent);
super.onNewIntent(intent);
}
如果您的活动没有运行,您将在OnCreate中获得额外的意图
确保您的活动位于前台:(此代码获取前景活动)
ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
String name = taskInfo.get(0).topActivity.getShortClassName();
if (name.equals(".YOUR_ACTIVITY_NAME"))
{
//only now start your intent.
}
你可以尝试另一个方向:
Intent intent = new Intent(getActivity(),YOUR_ACTIVITY_HERE.class);
PendingIntent sender = PendingIntent.getActivitygetActivity(), 0, intent, 0);
现在你进入Activity的onNewIntent函数的事件,如果它是活动的。这不是一个完整的解决方案,但这可能是一个很好的方向。