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都添加对应的代码:
然后在自己的app中:此处我的是:
ScanActivity
MainActivity
中就可以去调用:
对应任何的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;
}
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;
}
相关文章推荐
- android获取当前运行Activity的名字(解决避免及时聊天再出现通知)
- android获取当前运行Activity名字的方法
- android获取当前运行Activity名字的方法
- Android 判断应用前后台运行状态并获取当前 Activity 实例
- Android获取当前运行程序栈中的Activity
- android获取当前运行Activity名字的方法
- android 如何获取当前运行的activity
- Android自动化测试:获取当前前台应用的Activity名字
- android 获取当前正在运行的activity
- Android 判断应用前后台运行状态并获取当前 Activity 实例
- Android通过BaseActivity获取到当前启动的Activity名称
- Android开发 获取当前activity的屏幕截图
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- android获取当前运行的栈顶的应用包名
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android官方开发文档Training系列课程中文版:Activity测试之创建运行测试
- 获取正在运行的应用、当前应用正在运行的activity
- Android MonkeyRunner(Python在手机上获取正在运行的apk的包名,主Activity)
- android 如何获取当前的Activity类名