package xyz.yhsj.yhutils.phone;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import xyz.yhsj.yhutils.logutils.LogUtils;
/**
* APP 工具类<br>
*/
public class AppUtils {
/**
* 获得APP的名称
*
* @param context
* @return
*/
public static String getAppName(Context context) {
if (context == null) {
return null;
}
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
int labelRes = packageInfo.applicationInfo.labelRes;
String appName = context.getResources().getString(labelRes);
LogUtils.i("APP名字:" + appName);
return appName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* need < uses-permission android:name =“android.permission.GET_TASKS” />
* 判断是否前台运行
*/
public static boolean isRunningForeground(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1);
if (taskList != null && !taskList.isEmpty()) {
ComponentName componentName = taskList.get(0).topActivity;
if (componentName != null && componentName.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
/**
* 获取应用程序包名
*/
public static String getPackageName(Context context) {
if (context == null) {
LogUtils.e("getPackageName context为空");
return null;
}
String pkgName = context.getPackageName();
LogUtils.i("APP包名:" + pkgName);
return pkgName;
}
/**
* 启动APK的默认Activity
*
* @param activity
* @param packageName
*/
public static void startApkActivity(final Context activity,
String packageName) throws Exception {
PackageManager pm = activity.getPackageManager();
PackageInfo pi;
pi = pm.getPackageInfo(packageName, 0);
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage(pi.packageName);
List<ResolveInfo> apps = pm.queryIntentActivities(intent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String className = ri.activityInfo.name;
intent.setComponent(new ComponentName(packageName, className));
activity.startActivity(intent);
}
}
/**
* 获取应用程序下所有Activity
*
* @param activity
* @return
*/
public static ArrayList<String> getActivities(Context activity) {
ArrayList<String> result = new ArrayList<String>();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.setPackage(activity.getPackageName());
for (ResolveInfo info : activity.getPackageManager()
.queryIntentActivities(intent, 0)) {
result.add(info.activityInfo.name);
}
return result;
}
/**
* 检查有没有应用程序来接受处理你发出的intent
*
* @param context
* @param action
* @return
*/
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
/**
* 获取所有app的安装路径
*
* @param context
* @return ArrayList<HashMap<String, String>> package:包名,url:地址
*/
public static ArrayList<HashMap<String, String>> getAllInstelAppUrl(
Context context) {
ArrayList<HashMap<String, String>> appInfos = new ArrayList<HashMap<String, String>>();
PackageManager pm = context.getPackageManager();
for (ApplicationInfo app : pm.getInstalledApplications(0)) {
HashMap<String, String> appInfo = new HashMap<String, String>();
appInfo.put("package", app.packageName);
appInfo.put("url", app.sourceDir);
appInfos.add(appInfo);
LogUtils.d("package: " + app.packageName + ", sourceDir: "
+ app.sourceDir);
}
return appInfos;
}
/**
* 获取所有可启动app的包名
*
* @param context
* @return ArrayList<String> 包名
*/
public static ArrayList<String> getAllCanStartApp(Context context) {
ArrayList<String> appInfos = new ArrayList<String>();
PackageManager pm = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
for (ResolveInfo app : pm.queryIntentActivities(intent, 0)) {
appInfos.add(app.activityInfo.packageName);
LogUtils.d("name" + app.activityInfo.name + " package: "
+ app.activityInfo.packageName);
}
return appInfos;
}
}