亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

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

2020-04-11 12:36:00
字體:
來源:轉載
供稿:網友
因為在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: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);方法要這個權限。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品国产精品国自产观看浪潮| 国产亚洲美女精品久久久| 91久久久国产精品| 亚洲福利视频网站| 亚洲自拍av在线| 日本欧美中文字幕| 欧美自拍视频在线| 国产精品成av人在线视午夜片| 欧美电影免费观看高清| 日韩视频精品在线| 久久99久国产精品黄毛片入口| 久久97久久97精品免视看| 亚洲人成77777在线观看网| 国产精品高清在线| 国产精品精品视频一区二区三区| 日韩av在线一区| 亚洲娇小xxxx欧美娇小| 久久精品免费播放| 红桃视频成人在线观看| 97在线视频免费| 97在线免费观看| 欧美日韩国产中文字幕| 欧美一区二区三区精品电影| 亚洲国产欧美一区二区三区久久| 欧美限制级电影在线观看| 国产视频精品一区二区三区| 国产日产欧美精品| 亚洲精品日韩丝袜精品| 亚洲综合精品伊人久久| 国产精品美女久久久久av超清| 日韩欧美在线视频观看| 日韩中文字幕精品视频| 亚洲欧美制服第一页| 国产97免费视| 亚洲一区二区福利| 中文字幕日韩在线视频| 高清欧美性猛交| 亲爱的老师9免费观看全集电视剧| 亚洲综合中文字幕68页| 亚洲午夜色婷婷在线| 日韩有码视频在线| 久久精品一区中文字幕| 国产精品高潮呻吟视频| 91亚洲精品一区| 亚洲少妇中文在线| 精品国产欧美一区二区五十路| 欧洲日韩成人av| 狠狠爱在线视频一区| 国产精品偷伦一区二区| 欧美日韩成人免费| 国产成人精品av在线| 精品偷拍各种wc美女嘘嘘| 91精品国产一区| 国内揄拍国内精品少妇国语| 国产精品久久久精品| 中文字幕日韩欧美在线视频| 日韩成人激情视频| 2019av中文字幕| 亚洲福利在线观看| 日韩成人久久久| 欧美丰满少妇xxxxx做受| 日韩中文字幕在线免费观看| 国产精品444| 亚洲国产高潮在线观看| 中文在线资源观看视频网站免费不卡| 国产精品极品美女在线观看免费| 日韩一区二区三区xxxx| 国产精品网站大全| 欧美猛交免费看| 中文字幕亚洲一区二区三区五十路| 国产精品丝袜高跟| 亚洲开心激情网| 国内精品久久久久影院优| 日韩大胆人体377p| 欧美激情精品久久久久久黑人| 精品调教chinesegay| 97精品视频在线| 久久91亚洲精品中文字幕奶水| 精品亚洲男同gayvideo网站| 亚洲a在线播放| 超碰91人人草人人干| 中文字幕精品视频| 91精品在线播放| 日韩在线一区二区三区免费视频| 欧美性高潮在线| 亚洲三级黄色在线观看| 日韩电视剧免费观看网站| 热久久这里只有精品| xvideos亚洲人网站| 九九热这里只有在线精品视| 日韩精品极品视频| 欧美激情欧美狂野欧美精品| 日韩中文字幕在线| 日韩在线国产精品| 91精品国产综合久久香蕉的用户体验| 久久久精品电影| 欧美性猛交xxxx免费看久久久| 日韩激情片免费| 91精品国产91久久久久久| 亚洲图片制服诱惑| 深夜福利国产精品| 国产婷婷97碰碰久久人人蜜臀| 韩国国内大量揄拍精品视频| 麻豆乱码国产一区二区三区| 日韩美女激情视频| 日韩成人激情视频| 成人在线视频网站| 尤物yw午夜国产精品视频明星| 欧美激情亚洲一区| 97久久精品视频| 日韩av在线影视| 欧美疯狂xxxx大交乱88av| 亚洲国产精品网站| 日本亚洲欧美成人| 久久综合亚洲社区| 91精品综合久久久久久五月天| 1769国产精品| 久久精品中文字幕免费mv| 国产97在线亚洲| 在线日韩第一页| 国产精品视频播放| 日韩av片电影专区| 97成人精品视频在线观看| 国产成人精品久久久| 国产不卡av在线免费观看| 亚洲精品美女在线观看| 538国产精品视频一区二区| 亚洲欧美综合另类中字| 欧美三级欧美成人高清www| 麻豆国产va免费精品高清在线| 久久激情视频久久| 国内免费精品永久在线视频| 俺去亚洲欧洲欧美日韩| 日韩亚洲欧美中文在线| 久久97精品久久久久久久不卡| 日韩乱码在线视频| 亚洲大胆人体在线| 国产91免费看片| 亚洲视频欧美视频| 欧美性一区二区三区| 亚洲天堂av网| 欧美亚洲国产精品| 97精品视频在线播放| 色综合久久久888| 17婷婷久久www| 欧美精品在线播放| 国产欧美精品va在线观看| 亚洲专区在线视频| 久久久久久av| 亚洲精品之草原avav久久| 亚洲qvod图片区电影| 国产精品一区二区女厕厕| 91午夜在线播放| 欧美精品久久久久久久久| 日韩美女av在线免费观看| 国产亚洲一级高清| 伊是香蕉大人久久| 欧美大片在线免费观看| 韩剧1988免费观看全集| 久久精品视频va| 国产玖玖精品视频| 国产69精品久久久| 尤物九九久久国产精品的特点| 欧美色播在线播放|