android实现获取正在运行的应用程序_安卓软件开发教程-查字典教程网
android实现获取正在运行的应用程序
android实现获取正在运行的应用程序
发布时间:2016-12-28 来源:查字典编辑
摘要:因为在framework中想添加这个功能,所以写了个appliction来实现一下获取正在运行的应用程序:还是先看图吧:这个app主要是简单...

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

还是先看图吧:

这个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:text

/>

<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);方法要这个权限。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新安卓软件开发学习
    热门安卓软件开发学习
    编程开发子分类