Android 怎么获取所有正在运行的应用程序

Android 怎么获取所有正在运行的应用程序,第1张

在framework中想添加这个功能,所以写了个appliction来实现一下获取正在运行的应用程序: 还是先看图吧: 这个app主要是简单的实现了获取非系统的应用程序和一些常用的系统应用程序,显示在一个listview中,并添加了点击(回复到你打开的界面)和长按事件(关闭应用程序)。 看看代码吧: 直接贴出来再加上注释吧(直接写在一个文件里并数): package andorid/apk/res/android"android:layout_width="fill_parent"兄蔽斗android:layout_height="wrap_content"android:orientation="horizontal" ><ImageView android:id="@+id/icon"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextView android:layout_width="40dip"android:layout_height="40dip" />  <LinearLayout android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content">  <TextView android:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="bold" />  <TextView android:id="@+id/info"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout> </LinearLayout> main: <?xml version="1/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" > <ListView android:id="@+id/list_view"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"></ListView> </LinearLayout> 在manifest文件中要加以个权限: <uses-permission android:name="android.permission.RESTART_PACKAGES" /> 主要是前面的am.killBackgroundProcesses(packageName)方法要这个权羡磨限。

获得应用绝消程序信息的的方法如下:

public abstract ApplicationInfo getApplicationInfo(String packageName, int flags)

参数:packagename 包名

flags 该ApplicationInfo是拍培此flags标记袭宏唯,通常可以直接赋予常数0即可

功能:返回ApplicationInfo对象

一、修改Android Studio(以下简称AS)的内存配置

因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是748m, 可自行修改。

二、配置AS的JDK、SDK

在IDE中添加一个没有classpath的JDK, 这样可以确保使用源码里的库文件

并将其作为要使用的SDK的Java SDK。

三、生成导入AS所需配置文件(*.ipr)

①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)

②检查out/host/linux-x86/framework/目录下是否有idegen.jar

如果idegen.jar不存在,执行:

mmm development/tools/idegen/

在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。

我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。

③执行

development/tools/idegen/idegen.sh

等待出现类似下面的结果:

Read excludes: 5ms

Traversed tree: 44078ms

这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ IDEA(AS是基于IntelliJ IDEA社区版开发的)的配置文件

Tips:

AS在导入代码时比较慢,建议先修改android.iml,将自己用不到的代码exclude出去.可以敬侍仿照过滤.repo文件夹的语法,如:

<excludeFolder url="file://$MODULE_DIR$/.repo" />

<excludeFolder url="file://$MODULE_DIR$/abi" />

<excludeFolder url="file://$MODULE_DIR$/art" />

删除掉所有不需要的module-library项

这样在导入时就会跳过abi和art文件夹.过滤的越多,AS的处旅稿笑理速度就会越快.

④在AS中打开源码根目录下新生成的android.ipr

如果在导入时AS出现

则建议按照其给定的解决方法来解决(网址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit)

四、解决源码中跳转错误问题

①为当前工程设置正确的SDK和JDK

②设置'Modules'的依赖

先将所有依赖删掉(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.

如:5.0.1的拆含ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)

点击指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:

注:推荐把frameworks和external这两个移到最上面,这样在代码跳转时会优先从这两个文件夹下查找,而不是在Android.jar中查找。

其它版本的代码在添加frameworks时可能会显示成:

没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的.

如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可.

五、DEBUG源码

可以通过给刚导入的工程在'Modules'中添加'Android Framework'来让AS将它作为一个Android工程,从而方便调试代码.

可以来添加Android Framework支持.

在代码中加断点,然后选择'Run'->'Attach debugger to Android process'

在d出的选择进程(Choose Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.

六、其它

代码中很多地方提示Call requires API Level x.... 出现这个问题是因为AS将工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.

只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。

也可以考虑使用build.gradle来解决该问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12424712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存