/**
* 文 件 名: Util.java
* 描 述:
* 版 权: Copyright (c)20010-2011 motone All Rights Reserved.
* 公 司: 摩通科技
* 作 者:
* 版 本: 1.0
* 创建时间: 2011-5-26
*
* 修改历史:
* 时间 作者 版本 描述
* ------------------------------------------------------------------
* 2011-5-26 张永辉 1.0 1.0 Version
*/
package com.mogoo.launcher2.taskManager.util;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.util.Log;
import android.util.TypedValue;
import com.mogoo.launcher.R;
import com.mogoo.launcher2.config.Mogoo_GlobalConfig;
import com.mogoo.launcher2.utils.Mogoo_BitmapUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class Mogoo_TaskUtil {
private static final String TAG = "Launcher.Mogoo_TaskUtil" ;
private static List<ComponentName> componentNameCache = null ;
//删除图标
private static Bitmap delIcon ;
/**
* 打开任务
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@param componentName
*/
public static void openTask(Context context,ComponentName componentName){
Intent intent = new Intent() ;
// intent.setPackage(componentName.getPackageName()) ;
List<ComponentName> cns = getAllDeskApp(context) ;
if(cns.contains(componentName)){
intent.setComponent(componentName) ;
}else{
for(ComponentName cn:cns){
if(cn.getPackageName().equals(componentName.getPackageName())) {
intent.setComponent(cn) ;
break ;
}
}
}
// intent.setAction(Intent.ACTION_MAIN) ;
// intent.setAction(Intent.CATEGORY_LAUNCHER) ;
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try{
context.startActivity(intent) ;
}catch(Exception e){
e.printStackTrace() ;
}
}
/**
* 打开任务
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@param componentName
*/
public static void openTask(Context context,Intent intent){
if(intent==null) return ;
intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
| Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
try{
context.startActivity(intent) ;
}catch(SecurityException se){
openTask(context, intent.getComponent()) ;
}catch(Exception e){
e.printStackTrace() ;
}
}
/**
* kill任务
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@param componentName
*/
public static void killTask(Context context,ComponentName componentName){
if(Mogoo_GlobalConfig.LOG_DEBUG){
Log.d(TAG, "------------killTask()---------packageName="+componentName.getPackageName()) ;
}
if(context==null) return ;
try{
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE) ;
// am.killBackgroundProcesses(componentName.getPackageName()) ;
// am.restartPackage(componentName.getPackageName()) ;
// android.os.Process.killProcess(android.os.Process.myPid());
// TODO: disabled by achellies
// am.forceStopPackage(componentName.getPackageName()) ;
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 取得桌面上所有的应用程序
*@author: 张永辉
*@Date:2011-6-13
*@param context
*@return
*/
public static List<ComponentName> getAllDeskApp(Context context){
if(componentNameCache!=null){
return componentNameCache ;
}
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0);
componentNameCache = new ArrayList<ComponentName>() ;
if(apps!=null){
for(ResolveInfo info:apps){
componentNameCache.add(new ComponentName(info.activityInfo.applicationInfo.packageName,info.activityInfo.name)) ;
}
}
return componentNameCache ;
}
/**
* 根据ComponentName取得任务或服务的名称
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@param componentName
*@return
*/
public static String getTitle(Context context,ComponentName componentName){
String title = componentName.getClassName() ;
PackageManager pm = context.getPackageManager() ;
try {
CharSequence cs = null ;
// if(getAllDeskApp(context).contains(componentName)){
// ActivityInfo info = pm.getActivityInfo(componentName, 0) ;
// cs = info.loadLabel(pm) ;
// }else{
// ApplicationInfo appInfo = pm.getApplicationInfo(componentName.getPackageName(), 0) ;
// cs = appInfo.loadLabel(pm) ;
// }
//----------------------modify by weijingchun 2011-12-9-------------------
// ActivityInfo info = pm.getActivityInfo(componentName, 0) ;
// cs = info.loadLabel(pm) ;
//// ApplicationInfo appInfo = pm.getApplicationInfo(componentName.getPackageName(), 0) ;
//// cs = appInfo.loadLabel(pm) ;
// if(cs!=null){
// title = cs.toString() ;
// }
// String t= Mogoo_BitmapUtils.getApplicationTitle(componentName);
String t= Mogoo_BitmapUtils.getApplicationTitle(componentName);
Log.i("Mogoo_TaskUtil", "componentName==" + componentName.getPackageName() + " getTitle=" + t);
if(t!=null && !t.equals(""))
{
title =t;
}else
{
ActivityInfo info = pm.getActivityInfo(componentName, 0) ;
cs = info.loadLabel(pm) ;
// ApplicationInfo appInfo = pm.getApplicationInfo(componentName.getPackageName(), 0) ;
// cs = appInfo.loadLabel(pm) ;
if(cs!=null){
title = cs.toString() ;
}
}
//---------------------end-------------------------
} catch (NameNotFoundException e) {
e.printStackTrace();
Log.d(TAG, e.getMessage()) ;
}
return title ;
}
/**
* 根据ComponentName取得任务图标
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@param componentName
*@return
*/
public static Bitmap getIcon(Context context,ComponentName componentName){
PackageManager pm = context.getPackageManager() ;
Log.i("Mogoo_TaskUtil", "componentName==" + componentName.getPackageName() + " geticon");
try {
Drawable icon = pm.getActivityIcon(componentName) ;
return drawable2Bitmap(icon) ;
} catch (NameNotFoundException e) {
e.printStackTrace();
Log.d(TAG,e.getMessage()) ;
return drawable2Bitmap(pm.getDefaultActivityIcon()) ;
}
}
/**
* 获取正在运行中的任务
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@return
*/
public static List<ActivityManager.RunningTaskInfo> getRunningTask(Context context,int maxNum){
if(context==null) return null ;
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE) ;
List<ActivityManager.RunningTaskInfo> runningTasks = am.getRunningTasks(maxNum) ;
if(Mogoo_GlobalConfig.LOG_DEBUG){
if(runningTasks!=null){
Log.d(TAG, "--------------------------Running Task:------------------------------") ;
for(ActivityManager.RunningTaskInfo task:runningTasks){
Log.d(TAG, "baseActivity:"+task.baseActivity) ;
Log.d(TAG, "topActivity:"+task.topActivity) ;
}
Log.d(TAG, "--------------------------Running Task:------------------------------") ;
}
}
return runningTasks ;
}
/**
* 获取正在运行中的服务
*@author: 张永辉
*@Date:2011-5-26
*@param context
*@param maxNum
*@return
*/
public static List<ActivityManager.RunningServiceInfo> getRunningService(Context context,int maxNum){
if(context==null) return null ;
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE) ;
return am.getRunningServices(maxNum) ;
}
public static List<ActivityManager.RunningAppProcessInfo> getRunningAppProcess(Context context){
if(context==null) return null ;
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE) ;
List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses() ;
// if(processes!=null){
// for(ActivityManager.RunningAppProcessInfo process:processes){
// Log.d(TAG, "importanceReasonComponent:"+process.importanceReasonComponent) ;
// Log.d(TAG, "processName:"+process.processName) ;
// }
// }
return processes ;
}
public static List<ActivityManager.RecentTaskInfo> getRecentTask(Context context,int maxNum){
if(context==null) return null ;
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE) ;
List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(maxNum, 0) ;
if(Mogoo_GlobalConfig.LOG_DEBUG){
if(recentTasks!=null){
Log.d(TAG, "--------------------------Recent Task:------------------------------") ;
for(ActivityManager.RecentTaskInfo task:recentTasks){
Log.d(TAG, "baseIntent.getComponent():"+task.baseIntent.getComponent()) ;
Log.d(TAG, "origActivity:"+task.origActivity) ;
}
Log.d(TAG, "--------------------------Recent Task:------------------------------") ;
}
}
return recentTasks ;
}
/**
* 回收bitmap
*@author: 张永辉
*@Date:2011-5-25
*@param bitmap
*/
public static void recycle(Bitmap bitmap){
if(bitmap!=null&&!bitmap.isRecycled()){
bitmap.recycle() ;
bitmap = null ;
}
}
/**
* 获取删除图标
*@author: 张永辉
*@Date:2011-5-27
*@param context
*@return
*/
public static Bitmap getDelIcon(Context context){
if(delIcon==null){
delIcon = decodeResource(context.getResources(), R.drawable.mogoo_del) ;
}
return delIcon ;
}
/**
* Drawable转bitmap
*@author: 张永辉
*@Date:2011-5-26
*@param drawable
*@return
*/
public static Bitmap drawable2Bitmap(Drawable drawable){
if (drawable instanceof BitmapDrawable){
return ((BitmapDrawable)drawable).getBitmap() ;
}else if(drawable instanceof NinePatchDrawable){
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
return null ;
}
/**
* bitmap转drawable
*@author: 张永辉
*@Date:2011-5-30
*@param bitmap
*@return
*/
public static Drawable bitmap2Drawable(Bitmap bitmap){
return new BitmapDrawable(bitmap) ;
}
/**
* 通过资源文件创建位图
* @author: 魏景春
* @param res
* @param resId
* @return
*/
public static Bitmap decodeResource(Resources res, int resId) {
Bitmap bm = null;
if (bm == null || bm.isRecycled()) {
InputStream is = null;
BitmapFactory.Options opts = new BitmapFactory.Options();
try {
final TypedValue value = new TypedValue();
is = res.openRawResource(resId, value);
opts.inTargetDensity = value.density;
bm = BitmapFactory.decodeResourceStream(res, value, is, null, opts);
} catch (Exception e) {
} finally {
try {
if (is != null)
is.close();
} catch (IOException e) {
// Ignore
}
}
}
return bm;
}
}