应用相关工具类AppUtil

本文介绍了一个名为AppUtil的工具类,它提供了多种实用的功能,包括获取应用版本号和名称、判断当前进程、检查设备上是否存在指定包名的应用等。这些功能对于Android应用的开发和维护非常有用。

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;
    }

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值