0

フラグメントはロジックをカプセル化することを目的としているため、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を更新することです。私はここで立ち往生しています-それは可能ですか、そしてどのように?

4

1 に答える 1

1

レシーバーから別のインテントをアクティビティに投稿できます。アクティビティから 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);

アクティブな場合は、アクティビティの onNewIntent 関数でイベントが発生します。これは完全な解決策ではありませんが、良い方向性になる可能性があります。

于 2012-09-28T11:31:02.880 に答える