1、可以获取应用的版本号和版本名。
2、判断当前所在进程。
3、检测设备上是否存在某个包名的应用和存在某个action启动的应用。
package com.dway.common.utils;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.text.TextUtils;
import java.util.List;
/**
* Created by dway on 2016/11/22.
*/
public class AppUtil {
public static int getVersionCode(Context context){
PackageManager manager = context.getPackageManager();
try {
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
return info.versionCode;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 获取版本号
*
* @return 当前应用的版本号
*/
public static String getVersionName(Context context) {
try {
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
if (info != null && !TextUtils.isEmpty(info.versionName)) {
return info.versionName;
}
} catch (Exception e) {
e.printStackTrace();
}
return "1.0";
}
public static String getPackageName(Context context){
return context.getPackageName();
}
/**
* 获取当前调用地方的进程名字
* 一般获取到的是自己包名的进程,也有可能一些第三方的,例如极光推送,会新开一个进程
* @return
*/
public static String getCurProcessName(Context context) {
int pid = android.os.Process.myPid();
ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
return appProcess.processName;
}
}
return "";
}
/**
* 判断当前调用地方的进程是否是我包名的进程
* @return
*/
public static boolean isMyPackageProcess(Context context){
String packageName = getPackageName(context);
String curProcessName = getCurProcessName(context);
if(!TextUtils.isEmpty(packageName)
&& !TextUtils.isEmpty(curProcessName)
&& packageName.equals(curProcessName)){
return true;
}
return false;
}
/**
* 判断是否存在某个包名的应用
*/
public static boolean checkPackageExist(Context context, String packageName) {
if (TextUtils.isEmpty(packageName)){
return false;
}
try {
//如果包名不存在会抛出异常
context.getPackageManager().getApplicationInfo(
packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
/**
* 判断是否存在某个action可以启动的应用
* 注意,该Activity需要有<category android:name="android.intent.category.DEFAULT" />才能被检测到
*/
public static boolean checkActionExist(Context context, String action){
if (TextUtils.isEmpty(action)){
return false;
}
Intent intent = new Intent(action);
List<ResolveInfo> resolveInfo = context.getPackageManager().queryIntentActivities(
intent, PackageManager.MATCH_DEFAULT_ONLY);
return resolveInfo.size() > 0;
}
}