2012-09-28 26 views
0

由於片段旨在封裝邏輯,我決定將BroadReceiver邏輯放入我自己的片段中。在片段中接收警報並更新UI

起初我設置像它的報警中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

是的,這是可能的 – Rasel

+0

我在做類似的事情! http://stackoverflow.com/questions/13523350/android-alarm-clock-ui – toobsco42

回答

1

從您的Receiver中,您可以將其他Intent發佈到您的活動中。在Activity中,您可以使用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函數中,如果它的活動。這不是一個完整的解決方案,但這可能是一個不錯的方向。

+0

謝謝,但如果我只需要在前臺運行活動時需要更新它,因爲我可以在onResume方法中觸發更新? – midnight

+0

btw context.startActivityForResult(notificationIntent,0);在onReceive方法中說:「方法startActivityForResult(Intent,int)未定義類型上下文」 – midnight

+0

如果您的活動位於前臺,則onNewIntent函數將被調用。如果您不希望發送應用程序,則需要在接收器中檢查應用程序的狀態。查看我編輯的答案 – Givi