2017-08-29 28 views
0

我有一个应用程序,从服务器的响应不同的情况下打开不同的活动。让我有两个活动ActivityA & ActivityBAB不能同时启动。假设A活动被称为启动并在同一时间B也被称为启动。如果A首先启动,B隐藏它,并开始在视图的顶部使A在背景中。我如何检查A是否已从内部启动活动B ??Android - 如何获得Android上的最后前景活动?

到现在我曾尝试:

ActivityManager m = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10); 
    Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator(); 
    while (itr.hasNext()) { 
     ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo) itr.next(); 
     int id = runningTaskInfo.id; 
     CharSequence desc = runningTaskInfo.description; 
     int numOfActivities = runningTaskInfo.numActivities; 
     String topActivity = runningTaskInfo.topActivity.getShortClassName(); 
     Constants.debugLog(TAG, "checkActivityStack desc: " + desc + " numOfActivities: " + numOfActivities + " topActivity: " + topActivity); 
    } 

========================= 另一个从堆栈

ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 

    int sizeStack = am.getRunningTasks(5).size(); 

    for(int i = 0;i < sizeStack;i++){ 
     ComponentName cn = am.getRunningTasks(2).get(i).topActivity; 
     Constants.debugLog(TAG, "checkActivityStack "+cn.getClassName()); 
    } 
+0

采取全局变量定义在应用程序类,把它写在一个活动启动,并检查变量b活动 – Reena

+0

你可以发布你的代码,女巫打开这些活动? – Hamza

+0

,否则您需要检查活动管理器的运行进程 – Reena

回答

1

,我可能会做一个公共领域,代码将是这个样子:

// A 
public static boolean started = false; 

@Override 
public void onStart() { 
    super.onStart(); 
    started = true; 
} 

@Override 
public void onStop() { 
    super.onStop(): 
    started = false; 
} 

,并检查是这样的:

// B 
if (A.started) { 
    // Abort starting 
} 
+0

实际上,我并不想这样做。如果不知何故,我可以得到最后的前景活动名称的名称这将是一个很大的帮助对我来说 –

+0

,但如果我没有找到任何解决方案,我一定会用这种方式 –

1

我不确定这是不是你要找的东西,但它看起来很简单。 http://iamvijayakumar.blogspot.com/2011/09/get-current-activity-and-package-name.html

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    List<RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    ComponentName componentInfo = taskInfo.get(0).topActivity; 
    Log.d(WebServiceHelper.TAG, "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName() + " Package Name : " + componentInfo.getPackageName()); 

你需要使用许可android.permission.GET_TASKS 希望这有助于

+0

这一个返回我当前顶级活动的名称,但我希望最后一个在当前开始的背景中 –

+0

确定未使用am.getRunningTasks(10);为最后10个活动并且然后使用循环 –

+0

Iterator itr = runningTaskInfoList.iterator(); (itr.hasNext()) { RunningTaskInfo runningTaskInfo =(RunningTaskInfo)itr.next(); int id = runningTaskInfo.id; CharSequence desc = runningTaskInfo.description; 字符串topActivity = runningTaskInfo.topActivity。getShortClassName(); int numOfActivities = runningTaskInfo.numActivities; } –