1

我的应用程序由许多活动和一个BraodcastReceiver. 当我的应用程序接收到广播 Intent 时,如果它在前台,我想重新启动一个活动。我该如何实现它?

4

2 回答 2

2

如果它已经在运行,则使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT启动要被带到其任务历史堆栈前面的活动,如果没有,则作为新的启动。确认 Activity 是否正在运行或不使用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 存储在屏幕上不再可见的活动堆栈中:

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

进行活动singleTop并发送意图。

于 2012-12-17T07:21:41.157 回答