2012-12-17 75 views
1

我的應用程序由許多活動和BraodcastReceiver組成。我想重新開始一個活動,如果它在前臺時我的應用程序收到廣播Intent.How我可以實現它嗎?從BroadCast接收器開始工作

回答

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:noHistoryAndroidManifest.xml不再可見存儲在活動組活動在屏幕上:

<activity 
     android:noHistory="false" 
     android:name=".Your_Activity" /> 
+0

*「Your_Activity_Name.this」 * - 即應該是'.class'而不是'.this' – Squonk

+1

@Squonk:感謝只是錯誤當我打字 –

+0

沒問題 - 我們都犯這樣的錯誤。 :) – Squonk

0

使活動singleTop,只是發送意圖。