android 正在运行的程序与界面

判断某个程序正在运行,得首先得到正在运行任务的列表,

首先 加入权限 <uses-permission android:name="android.permission.GET_TASKS" />,否则可能会有exception抛出。

//判断应用是否在运行

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

List<RunningTaskInfo> list = am.getRunningTasks(100);

boolean isAppRunning = false;

String MY_PKG_NAME = "com.cyberblue.iitag";

for (RunningTaskInfo info : list) {

if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {

isAppRunning = true;

Log.i(TAG,info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());

break;

}

}

100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表系统后台有此进程在运行,具体要做如何判断就看自已的业务需求。这个类还有更多的方法可以取得系统运行的服务、内存使用情况等

//如果启动蓝牙的话,运行中才去重启蓝牙,否则会导致安装了这个应用后蓝牙无法关闭

if(isAppRunning){

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (!mBluetoothAdapter.isEnabled()) {

// enable()打开蓝牙,这个方法打开蓝牙不会弹出提示

mBluetoothAdapter.enable();

}

}

/**

* 检测某ActivityUpdate是否在当前Task的栈顶

*/

public boolean isTopActivy(String cmdName){

ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);

List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);

String cmpNameTemp = null;

if(null != runningTaskInfos){

cmpNameTemp=(runningTaskInfos.get(0).topActivity).toString);

Log.e("cmpname","cmpname:"+cmpName);

}

if(null == cmpNameTemp)return false;

return cmpNameTemp.equals(cmdName);

}

/**get the launcher status   获取 launcher的状态*/

private  boolean isLauncherRunnig(Context context) {

boolean result = false ;

List<String> names = getAllTheLauncher();

ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE) ;

List<ActivityManager.RunningAppProcessInfo> appList = mActivityManager.getRunningAppProcesses() ;

for (RunningAppProcessInfo running : appList) {

if (running.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {

for (int i = 0; i < names.size(); i++) {

if (names.get(i).equals(running.processName)) {

result = true ;

break;

}

}

}

}

return result ;

}

/**获取所有的launcher**/

private List<String> getAllTheLauncher(){

List<String> names = null;

PackageManager pkgMgt = this.getPackageManager();

Intent it = new Intent(Intent.ACTION_MAIN);

it.addCategory(Intent.CATEGORY_HOME);

List<ResolveInfo> ra =pkgMgt.queryIntentActivities(it,0);

if(ra.size() != 0){

names = new ArrayList<String>();

}

for(int i=0;i< ra.size();i++)

{

String packageName =  ra.get(i).activityInfo.packageName;

names.add(packageName);

}

return names;

}

================================================

Android系统内部状态信息的相关api:

得到ActivityManager :

ActivityManager activityManager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE)

这个位查到底是什么信息:

ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();

获取进程内存状态的信息:

Debug.MemoryInfo[] processMemoryInfo = activityManager.getProcessMemoryInfo(processIds);

获取当前运行的service信息:

List<RunningServiceInfo> runningServiceInfos = activityManager.getRunningServices(MaxValue);

获取当前运行的任务信息:

List<RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(MaxValue);

其中runningTaskInfos 的 topActivity就是当前Task的活跃Activity

在getRunningTasks()所返回的Task队列中系统会根据这些Task的活跃度有一个排序,越活跃越是靠前。第一个就是当前活动的Task

时间: 2024-10-14 04:50:45

android 正在运行的程序与界面的相关文章

Android Studio运行安卓程序报Failure [INSTALL_FAILED_OLDER_SDK]的解决办法

http://androidren.com/index.php?qa=320&qa_1=android-studio运行安卓程序报failure-install_failed_older_sdk 一般情况是最小支持的sdk版本高于当前设备的Android系统版本,这时候需要修改manifest和build.gradle两个地方. 修改源码app目录下的"build.gradle"文件,将其中的minSdkVersion .targetSdkVersion 修改为跟manifes

Android Studio 运行java程序

当我们装了Android Studio 学习安卓开发的时候,难免会要学习java,这时候,难道在重新装一个编译器吗?不需要,我们直接用 Android Studio 就可以. 1.新建一个空项目,选择红色项目 2.File ----->  new -----> new Module...   然后弹出一个框  在more module 里面选择java  Library .一路next. 3.编写相应的代码,记得把上面的第一行注释掉 4.配置,点击 run -> edit configu

用Android Studio 运行ndk 程序

最近准备研究一下android双进程守护,由于此前用eclipse 写jni习惯了,现在主要用as 工具.在此也试着写个demo 然后在对双进程守护进行研究 1.所需工具 android studio 1.4 ndk :android-ndk-r9d -.其它必备在此就不叙述 2.示例介绍 1).项目创建 打开as 创建一个project 输入包名 com.cayden.jnis 在此如果采用as 生成的布局和activity ,后续运行会出现问题. 具体后续在问题部分会进行说明 2).创建jn

Android获取正在运行的程序并kill掉它

获取正在运行的程序并把它加入到一个listview的adapter类面,方法如下: // 正在运行的 public List<Programe> getRunningProcess() { pi = new PackagesInfo(this); am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); // 获取正在运行的应用 run = am.getRunningAppProcesses(); // 获取包管理器,在这里主要通过包

Android错误笔记:adb不是内部或外部命令 也不是可运行的程序

一般如果按照网上的Eclipse配置教程操作的话,如果出现在dos界面输入adb出现:“adb不是内部或外部命令 也不是可运行的程序.”这个问题一般不会影响android的大部分开发,但需要用到调用到数据库的时候,则需要用到adb. 可以尝试以下方法. 解决方法: 在sdk的安装目录里找到platform-tools文件夹,复制里面adb.exe. AdbWinApi.dll. AdbWinUsbApi.dll三个文件到,粘贴到DOS窗口显示的运行路径.如下图,粘贴到C:\User\chp.里.

杂谈——Android从启动到程序运行发生的事情

转载请注明出处 博客地址:http://blog.csdn.net/JonsTank2013/article/details/51118563 作者:李中权 前言 好久没有写博客了,瞬间感觉好多学了的东西不进行一个自我的总结与消化总归变不成自己的.通过博客可能还可以找到一些当初在学习的时候没有想到的问题.想了半天,从大二上学期自学Android以来还没有对Android从启动到程序运行期间进行一个完整的归纳,刚好最近又学到了一些新东西,那就以这篇博客为媒介,总结一下从Android启动到程序运行

Android从启动到程序运行整个过程的整理

1Android是基于Linux的一个操作系统,它可以分为五层,下面是它的层次架构图,可以记一下,因为后面应该会总结到SystemServer这些Application Framework层的东西 Android的五层架构从上到下依次是:应用层,应用框架层,库层,运行时层,Linux内核层. 而在Linux中,它的启动可以归为一下几个流程: Boot Loader——>初始化内核——>...... 当初始化内核之后,就会启动一个相当重要的祖先进程,也就是init进程,在Linux中所有的进程都

Android错误之--&#39;keytool&#39; 不是内部或外部命令,也不是可运行的程序

要用到高德地图的SDK,首先要获取sha1,获取Android studio下的sha1的方法可以切到.android下,输入命令: keytool -list -keystore debug.keystore .但是会出现如下错误: 分析原因,原理是没有正确配置java环境变量,正确配置环境变量的方法可以参考如下链接: http://jingyan.baidu.com/article/c85b7a6414f2ee003bac95d5.html 这时可以在Android studio的Termi

64位系统运行win32程序 界面卡死问题

win7 下运行游戏发现界面卡很久,跟踪发现卡在了connect( ). 游戏中connect 工作在阻塞模式下,阻塞可以接受.但是阻塞了5S 以上就感觉很奇怪. 而且只在一台电脑上发生这种情况.与服务器联调,并抓包.发现真正发起连接到连接成功其实非常快的. 时间主要耗在调用 connect  到显卡 发出连接请求之间. 于是在出问题的电脑上 想要断点调一下connect.发现VS 附加到进程的时候 提示 A remote operation is taking longer than expe