android 判断应用安装情况,android判断应用安装情况

public class InstalledPackageQuerier {

public static final int VERSION_CODE_NONE = -1;

private static final Integer EMPTY_VERSION = new Integer(VERSION_CODE_NONE);

private static InstalledPackageQuerier sInstance;

private Context mContext;

private Map mInstalledApps;

private Map>> mListeners = new HashMap>>();

private ArrayList> mGlobalListener = new ArrayList<>();

public static void init (Context context) {

sInstance = new InstalledPackageQuerier(context);

}

public static InstalledPackageQuerier getInstance () {

return sInstance;

}

private InstalledPackageQuerier (Context context) {

mContext = context.getApplicationContext();

mInstalledApps = new HashMap<>();

registerReceiver();

}

private void registerReceiver () {

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_PACKAGE_ADDED);

filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

filter.setPriority(Integer.MAX_VALUE); // 设置级别

filter.addDataScheme("package");

mContext.registerReceiver(new AppInstallReceiver(), filter);

}

public int getInstalledAppVersionCode (String packageName) {

Integer versionCode = mInstalledApps.get(packageName);

if (versionCode == null) {    //还没缓存

PackageInfo info = getPackageInfo(packageName);

if (info != null) {

mInstalledApps.put(packageName, info.versionCode);

return info.versionCode;

} else {

mInstalledApps.put(packageName, EMPTY_VERSION);

return VERSION_CODE_NONE;

}

} else {

return versionCode.intValue();

}

}

public boolean isInstalled (String packageName) {

return getInstalledAppVersionCode(packageName) != VERSION_CODE_NONE;

}

private PackageInfo getPackageInfo (String packageName) {

try {

return mContext.getPackageManager().getPackageInfo(packageName, 0);

} catch (NameNotFoundException e) {

}

return null;

}

public class AppInstallReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

String packageName = intent.getDataString().substring(8);

if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {

if (mInstalledApps.containsKey(packageName)) {

PackageInfo info = getPackageInfo(packageName);

if (info != null) {

mInstalledApps.put(packageName, info.versionCode);

}

}

dispatchAppChanged(packageName, true);

} else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {

if (mInstalledApps.containsKey(packageName)) {

mInstalledApps.put(packageName, EMPTY_VERSION);

}

dispatchAppChanged(packageName, false);

}

}

}

private void dispatchAppChanged (String appPackage, boolean addOrRemove) {

dispatchForList(mGlobalListener, appPackage, addOrRemove);

List> appListeners = mListeners.get(appPackage);

if (appListeners != null) {

dispatchForList(appListeners, appPackage, addOrRemove);

}

}

private void dispatchForList (List> list, String appPackage, boolean addOrRemove) {

Iterator> it = list.iterator();

while (it.hasNext()) {

WeakReference ref = it.next();

InstalledPackageQuerierListener listener = ref.get();

if (listener != null) {

if (addOrRemove) {

listener.onAppAdded(appPackage);

} else {

listener.onAppRemoved(appPackage);

}

} else {

it.remove();

}

}

}

public void addInstalledPackageQuerierListener (InstalledPackageQuerierListener listener) {

if (listener != null) {

mGlobalListener.add(new WeakReference<>(listener));

}

}

public void removeInstalledPackageQuerierListener (InstalledPackageQuerierListener listener) {

if (listener != null) {

Iterator> it = mGlobalListener.iterator();

while (it.hasNext()) {

WeakReference ref = it.next();

if (ref.get() == listener || ref.get() == null) {

it.remove();

break;

}

}

}

}

public void addInstalledPackageQuerierListener (String appPackage, InstalledPackageQuerierListener listener) {

if (listener != null) {

List> appListeners = mListeners.get(appPackage);

if (appListeners == null) {

appListeners = new ArrayList<>();

mListeners.put(appPackage, appListeners);

}

appListeners.add(new WeakReference<>(listener));

}

}

public void removeInstalledPackageQuerierListener (String appPackage, InstalledPackageQuerierListener listener) {

if (listener != null) {

List> appListeners = mListeners.get(appPackage);

if (appListeners != null) {

Iterator> it = appListeners.iterator();

while (it.hasNext()) {

WeakReference ref = it.next();

if (ref.get() == listener || ref.get() == null) {

it.remove();

break;

}

}

}

}

}

public interface InstalledPackageQuerierListener {

void onAppAdded(String appPackage);

void onAppRemoved(String appPackage);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值