PackageUtils.java revision 442d7200fb77e2a6d0d3c8d1b17b3b8090581b02
1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16package com.android.providers.contacts.util;
17
18import android.content.Context;
19import android.content.pm.ApplicationInfo;
20import android.content.pm.PackageManager;
21import android.content.pm.PackageManager.NameNotFoundException;
22
23public class PackageUtils {
24    private PackageUtils() {
25    }
26
27    /**
28     * @return TRUE if the given package is installed for this user.
29     */
30    public static boolean isPackageInstalled(Context context, String packageName) {
31        try {
32            // Need to pass MATCH_UNINSTALLED_PACKAGES to fetch it even if the package is
33            // being updated.  Then use FLAG_INSTALLED to see if it's actually installed for this
34            // user.
35            final ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packageName,
36                    PackageManager.MATCH_DIRECT_BOOT_AWARE
37                            | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
38                            | PackageManager.MATCH_UNINSTALLED_PACKAGES);
39            return (ai != null) && ((ai.flags & ApplicationInfo.FLAG_INSTALLED) != 0);
40        } catch (NameNotFoundException e) {
41            return false;
42        }
43    }
44}
45