从BroadCast Receiver启动活动

时间:2012-12-17 07:19:41

标签: android broadcastreceiver

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

2 个答案:

答案 0 :(得分: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" />

答案 1 :(得分:0)

制作活动singleTop并发送意图。