您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 安卓开发 >> 正文

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

作者:佚名    责任编辑:admin    更新时间:2022-06-22

在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