1

私のアプリは、多くのアクティビティとBraodcastReceiver. アプリがブロードキャスト インテントを受信したときにフォアグラウンドにあるアクティビティを再開したいのですが、どのように実装できますか?

4

2 に答える 2

2

Intent.FLAG_ACTIVITY_REORDER_TO_FRONTを使用してアクティビティを起動し、既に実行されている場合はタスクの履歴スタックの前に移動し、そうでない場合は新しいものとして開始します。アクティビティが実行されているか、ActivityManager を使用していないかを確認する

    @Override
        public void onReceive(Context context, Intent intent) {
            //start activity
            if(isRunning(context)){

             Intent i = new Intent(context,Your_Activity_Name.class);
             i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
             context.startActivity(i);
            }
           else{
                 // Activity not available in activity stack
            }
        }

  public boolean isRunning(Context ctx) {
        ActivityManager activityManager = (ActivityManager) 
                         ctx.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = 
                      activityManager.getRunningTasks(Integer.MAX_VALUE);

        for (RunningTaskInfo task : tasks) {
            if (ctx.getPackageName().equalsIgnoreCase(
                                     task.baseActivity.getPackageName())) 
                return true;                                  
        }

        return false;
    }

また、画面に表示されなくなったアクティビティ スタックにアクティビティを格納するようにandroid:noHistory を設定します。AndroidManifest.xml

<activity
       android:noHistory="false"
       android:name=".Your_Activity" />
于 2012-12-17T07:25:07.343 に答える
0

アクティビティsingleTopを作成し、インテントを送信するだけです。

于 2012-12-17T07:21:41.157 に答える