package com.smit.processmanager;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ProcessManager extends Activity {
private static final String TAG="SMIT_TAG";
//生成动态数组,加入数据
private ArrayList<HashMap<String, Object>> listItem
= new ArrayList<HashMap<String, Object>>();
private ActivityManager am;
private ListView listview;
private AppAdapter listItemAdapter;
private int curPosition=0;
private UninstallReceiver mUninstallReceiver;
private List<ActivityManager.RunningTaskInfo> mRunningTasks;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mUninstallReceiver = new UninstallReceiver();
//监听卸载广播
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
this.registerReceiver(mUninstallReceiver, filter);
getRunningProcessList();
//getRunningActivityList();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
this.unregisterReceiver(mUninstallReceiver);
super.onDestroy();
}
/**
* 获取系统中正在运行的任务信息(强调下,任务是多个activity的集合)
*/
private void getRunningActivityList(){
String info = "" ;
// 获取的正在运行的activity的最大数量(防止太多,系统承受不了啊)
int maxNum = 40;
// ActivityManager的功能是为系统中所有运行着的Activity交互提供了接口,
// 主要的接口围绕着运行中的进程信息,任务信息,服务信息等
ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
/**
* 获取正在运行的任务这里一定要注意,这里我们获取的时候,
* 你的任务或者其中的activity可能没结束,但是当你在后边使用的时候,很有可能已经被kill了哦。
* 意思很简单,系统返给你的正在运行的task,是暂态的,仅仅代表你调用该方法时系统中的状态,
* 至于后边是否发生了该变,系统概不负责、
*/
List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(maxNum);
for(ActivityManager.RunningTaskInfo taskInfo:runningTasks){
info+="the task info start:\n";
info+="the running activity num:"+taskInfo.numRunning;
info+=";the activity count: "+taskInfo.numActivities;
info+=";the currnet task activity name:"+taskInfo.baseActivity.getClassName();
Log.e(TAG, info);
info="";
}
}
private void getRunningTasks()
{
int maxNum = 40;
mRunningTasks = am.getRunningTasks(maxNum);
}
public void getRunningProcessList() {
am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = am.getRunningAppProcesses();
PackageManager pm = this.getApplicationContext().getPackageManager();
this.getRunningTasks();
for (ActivityManager.RunningAppProcessInfo pi : list) {
if (pm.getLaunchIntentForPackage(pi.processName) != null) {
try {
ApplicationInfo ai = pm.getApplicationInfo(pi.processName,
PackageManager.GET_META_DATA);
HashMap<String, Object> map = new HashMap<String, Object>();
String packageName = pi.processName;
Drawable dw = ai.loadIcon(pm);
map.put("AppIcon",dw);
map.put("AppLabel",ai.loadLabel(pm));
map.put("AppPackageName",pi.processName);
if(!isSystemApplication(this,packageName)&&!isSelf(packageName)&&!isLauncher(packageName)&&isRunningApp(packageName))
{
listItem.add(map);
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}
/*int maxNum = 40;
am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTasks = am.getRunningTasks(maxNum);
//List<ActivityManager.RecentTaskInfo> runningTasks = am.getRecentTasks(maxNum,0);
PackageManager pm = this.getPackageManager();
for (ActivityManager.RunningTaskInfo taskInfo : runningTasks) {
HashMap<String, Object> map = new HashMap<String, Object>();
//String packageName = taskInfo.baseIntent.getPackage();
//String packageName = taskInfo.baseActivity.getPackageName().toString();
String packageName = taskInfo.topActivity.getPackageName().toString();
try {
ApplicationInfo ai = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_CONFIGURATIONS);
map.put("AppIcon",ai.loadIcon(pm));
map.put("AppLabel",ai.loadLabel(pm));
map.put("AppPackageName",packageName);
if(!isSystemApplication(this,packageName)&&!isSelf(packageName)&&!isLauncher(packageName))
{
listItem.add(map);
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}*/
//绑定Layout里面的ListView
listview = (ListView) findViewById(R.id.proclist);
//生成适配器的Item和动态数组对应的元素
/*listItemAdapter = new SimpleAdapter(this,listItem,//数据源
R.layout.list_items,//ListItem的XML实现
//动态数组与ImageItem对应的子项
new String[] {"AppIcon","AppLabel", "AppPackageName"},
//ImageItem的XML文件里面的一个ImageView,两个TextView ID
new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}
);*/
listItemAdapter=new AppAdapter(this);
//添加并且显示
listview.setAdapter(listItemAdapter);
//添加点击
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//setTitle("点击第"+arg2+"个项目");
Toast.makeText(ProcessManager.this,listItem.get(arg2).get("AppLabel").toString(),Toast.LENGTH_SHORT).show();
}
});
//添加长按点击
listview.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuI

Android_Discover
- 粉丝: 7
最新资源
- AI大模型驱动的智慧供应链ISC+IT蓝图规划设计方案.ppt
- AI大模型驱动数字化供应链创新架构规划方案.ppt
- AI大模型赋能智能制造数字化工厂供应链大数据解决方案.ppt
- DeepSeek+AI大模型赋能供应链与生产制造L1-L4级高阶流程规划框架.ppt
- DeepSeek+AI大模型赋能集团企业一体化供应链与物流平台建设总体规划方案.ppt
- DeepSeek+AI大模型赋能企业供应链计划管理APS及运输管理OTM一体化解决方案.ppt
- DeepSeek+AI大模型赋能数字化消防应急管理平台建设方案.ppt
- DeepSeek+AI大模型赋能数字化应急管理平台建设方案.ppt
- DeepSeek+AI大模型赋能数字化供应链顶层架构设计.ppt
- DeepSeek+AI大模型赋能物流集团供应链战略重构与治理革新.ppt
- DeepSeek+AI大模型赋能制造业供应链管理框架规划.ppt
- DEEPSEEK+AI大模型赋能制造企业采购流程体系和采购流程梳理及优化总体规划方案.ppt
- DeepSeek+AI大模型赋能智能工厂与智慧供应链数字化解决方案.ppt
- DeepSeek+AI大模型赋能制造业智能化供应链解决方案.ppt
- DeepSeek+AI大模型赋能智慧餐饮数字化供应链整体解决方案.ppt
- DeepSeek-AI大模型赋能制造企业采购流程体系优化总体规划方案.ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
- 3
- 4
- 5
- 6
前往页