PackageUtil.java revision 91ec61c3dca241befdf4a3803c45b051a3e3124f
191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project/* 291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** 391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** Copyright 2007, The Android Open Source Project 491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** 591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** you may not use this file except in compliance with the License. 791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** You may obtain a copy of the License at 891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** 991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 1091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** 1191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** Unless required by applicable law or agreed to in writing, software 1291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 1391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** See the License for the specific language governing permissions and 1591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** limitations under the License. 1691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project*/ 1791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectpackage com.android.packageinstaller; 1891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 1991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport java.io.File; 2091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport java.util.List; 2191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 2291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.app.Activity; 2391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.Context; 2491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.Intent; 2591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.ApplicationInfo; 2691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.PackageInfo; 2791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.PackageManager; 2891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.PackageParser; 2991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.ResolveInfo; 3091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.graphics.drawable.Drawable; 3191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.net.Uri; 3291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.util.DisplayMetrics; 3391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.view.View; 3491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.widget.ImageView; 3591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.widget.TextView; 3691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 3791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project/** 3891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * This is a utility class for defining some utility methods and constants 3991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * used in the package installer application. 4091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */ 4191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectpublic class PackageUtil { 4291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static final String PREFIX="com.android.packageinstaller."; 4391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static final String INTENT_ATTR_INSTALL_STATUS = PREFIX+"installStatus"; 4491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static final String INTENT_ATTR_APPLICATION_INFO=PREFIX+"applicationInfo"; 4591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static final String INTENT_ATTR_PERMISSIONS_LIST=PREFIX+"PermissionsList"; 4691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project //intent attribute strings related to uninstall 4791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static final String INTENT_ATTR_PACKAGE_NAME=PREFIX+"PackageName"; 4891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 4991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project /* 5091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * Utility method to get application information for a given packageURI 5191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */ 5291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static ApplicationInfo getApplicationInfo(Uri packageURI) { 5391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project final String archiveFilePath = packageURI.getPath(); 5491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project PackageParser packageParser = new PackageParser(archiveFilePath); 5591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project File sourceFile = new File(archiveFilePath); 5691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project DisplayMetrics metrics = new DisplayMetrics(); 5791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project metrics.setToDefaults(); 5891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project PackageParser.Package pkg = packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0); 5991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project if (pkg == null) { 6091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return null; 6191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 6291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return pkg.applicationInfo; 6391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 6491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 6591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project /* 6691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * Utility method to get package information for a given packageURI 6791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */ 6891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static PackageParser.Package getPackageInfo(Uri packageURI) { 6991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project final String archiveFilePath = packageURI.getPath(); 7091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project PackageParser packageParser = new PackageParser(archiveFilePath); 7191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project File sourceFile = new File(archiveFilePath); 7291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project DisplayMetrics metrics = new DisplayMetrics(); 7391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project metrics.setToDefaults(); 7491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0); 7591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 7691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 7791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project /* 7891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * Utility method to get application label from package manager for a given context 7991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */ 8091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static CharSequence getApplicationLabel(Context context, ApplicationInfo appInfo) { 8191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project CharSequence appName = appInfo.loadLabel(context.getPackageManager()); 8291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project if(appName == null) { 8391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project appName = context.getString(R.string.unknown); 8491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 8591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return appName; 8691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 8791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 8891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project /* 8991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * Utility method to getApplicationIcon from package manager for a given context 9091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */ 9191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static Drawable getApplicationIcon(Context context, ApplicationInfo appInfo) { 9291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return appInfo.loadIcon(context.getPackageManager()); 9391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 9491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 9591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project /* 9691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * Utility method to display application snippet. make sure to setContentView on context 9791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * before invoking this method 9891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */ 9991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static View initAppSnippet(Activity context, ApplicationInfo appInfo, int snippetId) { 10091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project View appSnippet = context.findViewById(snippetId); 10191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project ((ImageView)appSnippet.findViewById(R.id.app_icon)).setImageDrawable( 10291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project getApplicationIcon(context, appInfo)); 10391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project ((TextView)appSnippet.findViewById(R.id.app_name)).setText( 10491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project getApplicationLabel(context, appInfo)); 10591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return appSnippet; 10691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 10791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 10891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project public static boolean isPackageAlreadyInstalled(Activity context, String pkgName) { 10991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project List<PackageInfo> installedList = context.getPackageManager().getInstalledPackages( 11091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project PackageManager.GET_UNINSTALLED_PACKAGES); 11191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project int installedListSize = installedList.size(); 11291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project for(int i = 0; i < installedListSize; i++) { 11391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project PackageInfo tmp = installedList.get(i); 11491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project if(pkgName.equalsIgnoreCase(tmp.packageName)) { 11591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return true; 11691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 11791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project 11891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 11991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project return false; 12091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project } 12191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project} 122