萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> android獲取正在運行的應用程序

android獲取正在運行的應用程序

在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
copyright © 萬盛學電腦網 all rights reserved