您的位置:首页 > 移动开发 > Android开发

android 获取当前运行的activity(待整理测试····)

2015-05-14 14:53 423 查看
目前做im即时通信聊天,获取到消息需要判定是否是属于当前聊天窗口,以便分别处理,所以查阅了几种方法,几个解决方法:

1-How
to get current foreground activity context in android? – Stack Overflow

2-android
– How to check if my activity is the current activity running in the screen – Stack Overflow

普遍是采用给每个Activity都添加对应的代码:

@Override
protected void onResume() {
super.onResume();
AppContext.getInstance().setCurrentActivity(this);
}

@Override
protected void onPause() {
AppContext.getInstance().setCurrentActivity(null);
super.onPause();
}
@Override
public void onDestroy() {
AppContext.getInstance().setCurrentActivity(null);
super.onDestroy();
}

然后在自己的app中:此处我的是:
import android.app.Activity;
import android.app.Application;

public class AppContext extends Application{
private Application parentApp;
private Activity curActivity;

public Application getAppContext() {
return parentApp;
}
private static class LazyHolder {
static AppContext instance = new AppContext();
}
public static AppContext getInstance() {
return LazyHolder.instance;
}
@Override
public boolean Start(Map<String, Object> args) {
Object param = args.get(appContext);
if (param instanceof Application) {
parentApp = (Application)param;
return true;
}
return false;
}
@Override
public void Stop(Map<String, Object> args) {

}

public void setCurrentActivity(Activity curActivity){
this.curActivity = curActivity;
}

public Activity getCurrentActivity(){
return this.curActivity;
}

public boolean isInAdapterActivity(){
boolean isInAdapterActivity = false;
if(null != curActivity){
if(curActivity instanceof AdapterActivity){
isInAdapterActivity = true;
}
}
return isInAdapterActivity;
}

public boolean isInScanActivity(){
boolean isInScanActivity = false;
if(null != curActivity){
if(curActivity instanceof ScanActivity){
isInScanActivity = true;
}
}
return isInScanActivity;
}
public boolean isInMainActivity(){
boolean isInMainActivity = false;
if(null != curActivity){
if(curActivity instanceof MainActivity){
isInMainActivity = true;
}
}
return isInMainActivity;
}
}
然后在对应各个Activity:AdapterActivity
ScanActivity
MainActivity
中就可以去调用:
if(AppContext.getInstance().isInMainActivity()){
//do sth.
}
了。
对应任何的Activity来说,只要处于:当前运行(Running)的状态,则都必须经过onResume所以,在onResume中,设此时Activity为当前的Activity。对应的:当Activity从Running变成别的状态时,也会经过onPause,所以在onPause中去设置当前Activity为null(切换到别的Activity时,就进入了别的Activity的onResume了,就把别的Activity设置为当前的Activity了)以及:当Activity处于onDestory后,也同样设置当前Activity为null)此时继续之前的循环:如果进入别的Activity的话,自然会进入onResume,自然会设置别的Activity为当前正在运行的Activity。---------------------------分 割 线----------------------------------
另外找到的两种方法:
第一种:要方便一点(Service中无法使用)
代码如下:
private String getRunningActivityName() { 
        String contextString = context.toString(); 
        return contextString.substring(contextString.lastIndexOf(".") + 1, contextString.indexOf("@")); 
}
第二种:要稍微麻烦一点,需要一个权限(推荐)
代码如下:<uses-permission android:name="android.permission.GET_TASKS" /> 
private String getRunningActivityName(){         
        ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
        String runningActivity=activityManager.getRunningTasks(1).get(0).topActivity.getClassName(); 
        return runningActivity;                
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: