服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - android实现获取正在运行的应用程序

android实现获取正在运行的应用程序

2020-12-30 13:15Android开发网 Android

android如何获取正在运行的应用程序,因为在framework中想添加这个功能,所以写了个appliction来实现一下获取正在运行的应用程序

因为在framework中想添加这个功能,所以写了个appliction来实现一下获取正在运行的应用程序:
还是先看图吧:
android实现获取正在运行的应用程序
这个app主要是简单的实现了获取非系统的应用程序和一些常用的系统应用程序,显示在一个listview中,并添加了点击(回复到你打开的界面)和长按事件(关闭应用程序)。
看看代码吧:
直接贴出来再加上注释吧(直接写在一个文件里):

复制代码 代码如下:


package andorid.tasks;
import java.io.file;
import java.util.arraylist;
import java.util.hashmap;
import java.util.list;
import android.app.activity;
import android.app.activitymanager;
import android.app.activitymanager.runningappprocessinfo;
import android.app.alertdialog;
import android.content.context;
import android.content.dialoginterface;
import android.content.dialoginterface.onclicklistener;
import android.content.intent;
import android.content.pm.applicationinfo;
import android.content.pm.packagemanager;
import android.graphics.drawable.drawable;
import android.os.bundle;
import android.view.view;
import android.widget.adapterview;
import android.widget.adapterview.onitemlongclicklistener;
import android.widget.imageview;
import android.widget.listview;
import android.widget.simpleadapter;
import android.widget.adapterview.onitemclicklistener;
import android.widget.simpleadapter.viewbinder;
public class managertasksactivity extends activity {
private listview listview;
private packagemanager pm;
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.task_main);
pm= this.getpackagemanager();//获得包管理器
listview=(listview)findviewbyid(r.id.list_view);
loadlist(this);//加载listview
}
private void loadlist(context context)
{
arraylist<hashmap<string, object>> list=new arraylist<hashmap<string, object>>();
try{
activitymanager am = (activitymanager)context.getsystemservice(context.activity_service); //获得activitymanager对象
list<runningappprocessinfo> runningtasks = am.getrunningappprocesses(); //获得所有正在进行的程序存放在一个list中
for(int i=0;i<runningtasks.size();i++)
{
packageinfo pinfo=new packageinfo(context);//获得packageinfo对象
//get application which is not in system and the usually
//如果是非系统应用程序以及一些常用的应用程序就加到list中
if((pinfo.getinfo(runningtasks.get(i).processname).flags&pinfo.getinfo(runningtasks.get(i).processname).flag_system)==0
||(runningtasks.get(i).processname).equals("com.android.contacts")
||(runningtasks.get(i).processname).equals("com.android.email")
||(runningtasks.get(i).processname).equals("com.android.settings")
||(runningtasks.get(i).processname).equals("com.android.music")
||(runningtasks.get(i).processname).equals("com.android.calendar")
||(runningtasks.get(i).processname).equals("com.android.calculator2")
||(runningtasks.get(i).processname).equals("com.android.browser")
||(runningtasks.get(i).processname).equals("com.android.camera")
||(runningtasks.get(i).processname).equals("com.cooliris.media")
||(runningtasks.get(i).processname).equals("com.android.bluetooth")
||(runningtasks.get(i).processname).equals("com.android.mms"))
{
string dir = pinfo.getinfo(runningtasks.get(i).processname).publicsourcedir;
float size=float.valueof((float) ((new file(dir).length()*1.0)));//获得应用程序的大小如果size大于一m就用m为单位,否则用kb
//long date = new date(new file(dir).lastmodified()).gettime();
//system.out.println(pinfo.getinfo(runningtasks.get(i).processname).loadicon(pm));
hashmap<string, object> map=new hashmap<string, object>();
map.put("icon", pinfo.getinfo(runningtasks.get(i).processname).loadicon(pm));
map.put("name", pinfo.getinfo(runningtasks.get(i).processname).loadlabel(pm));
if(size>1024*1024)
map.put("info", size/1024/1024+" mb");
else
map.put("info", size/1024+" kb");
map.put("packagename", runningtasks.get(i).processname.tostring());//获得包名给后面用
list.add(map);
}
}
}catch(exception ex)
{}
simpleadapter listadapter=new simpleadapter(this, list, r.layout.task_list, new string[]{"icon","name","info"}, new int []{r.id.icon,r.id.name,r.id.info});
listview.setadapter(listadapter);//listview加载识别器
//下面这个方法主要是用来刷新图片,因为pinfo.getinfo(runningtasks.get(i).processname).loadicon(pm)获得图片不能被显示出
listadapter.setviewbinder(new viewbinder(){
public boolean setviewvalue(view view,object data,string textrepresentation){
if(view instanceof imageview && data instanceof drawable){
imageview iv=(imageview)view;
iv.setimagedrawable((drawable)data);
return true;
}
else
return false;
}
});
//为listview添加item的点击事件
listview.setonitemclicklistener(new onitemclicklistener() {
@override
public void onitemclick(adapterview<?> parent, view view, int position,
long id) {
//get the item of the list to a hashmap
hashmap<?, ?> map=(hashmap<?, ?>)parent.getitematposition(position);
//get package name from map
string packagename=(string) map.get("packagename");//从前面的map中获得包名
//if we onclick the item then start the application
//根据包名打开应用程序
intent intent=new intent();
intent =pm.getlaunchintentforpackage(packagename);
startactivity(intent);
finish();//打开应用程序之后注销本应用程序
}
});
//为listview的item添加长按事件
listview.setonitemlongclicklistener(new onitemlongclicklistener() {
@override
public boolean onitemlongclick(adapterview<?> parent, view view,
int position, long id) {
final hashmap<?, ?> long_map=(hashmap<?, ?>)parent.getitematposition(position);
new alertdialog.builder(managertasksactivity.this).settitle("are you sure close")
.setpositivebutton("sure", new onclicklistener() {
@override
public void onclick(dialoginterface dialog, int which) {
activitymanager am = (activitymanager)getsystemservice(context.activity_service);
string packagename=(string)long_map.get("packagename");
//base packagename to kill appliction
//根据包名杀死应用程序
am.killbackgroundprocesses(packagename);
//refash list
//刷新listview
loadlist(managertasksactivity.this);
}
}).setnegativebutton("cancle", new onclicklistener() {
@override
public void onclick(dialoginterface dialog, int which) {
}
}).show();
return false;
}
});
}
}
//类packageinfo主要包括applicationinfo getinfo(string name)方法
class packageinfo {
private list<applicationinfo> applist;
public packageinfo(context context){
//get all package data
packagemanager pm = context.getapplicationcontext().getpackagemanager();
applist = pm.getinstalledapplications(packagemanager.get_uninstalled_packages);
}
public applicationinfo getinfo(string name){
if(name == null){
return null;
}
for(applicationinfo appinfo : applist){
if(name.equals(appinfo.processname)){
return appinfo;
}
}
return null;
}
}


xml文件:
lsit:

复制代码 代码如下:


<linearlayout xmlns:android="http://schemas.android.com/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.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/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);方法要这个权限。

延伸 · 阅读

精彩推荐
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03