Android PackageInstaller 安装和卸载

应用的安装方式:adb install或者下载安装

过程分析请参考老罗的blog,,这里记录一下第三方应用程序安装apk的过程。

安装的过程主要是调用PackageInstaller这个App,源代码的位置在package/app/PackageInstaller

AndroidManifest.xml如下,

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.android.packageinstaller"><original-package android:name="com.android.packageinstaller" /><uses-permission android:name="android.permission.INSTALL_PACKAGES" /><uses-permission android:name="android.permission.DELETE_PACKAGES" /><uses-permission android:name="android.permission.CLEAR_APP_CACHE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MANAGE_USERS" /><application android:label="@string/app_name"android:allowBackup="false"android:theme="@android:style/Theme.DeviceDefault.DialogWhenLarge.NoActionBar"><activity android:name=".PackageInstallerActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:excludeFromRecents="true"><intent-filter><action android:name="android.intent.action.VIEW" /><action android:name="android.intent.action.INSTALL_PACKAGE" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="file" /><data android:mimeType="application/vnd.android.package-archive" /></intent-filter><intent-filter><action android:name="android.intent.action.INSTALL_PACKAGE" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="file" /><data android:scheme="package" /></intent-filter></activity><activity android:name=".InstallAppProgress"android:configChanges="orientation|keyboardHidden|screenSize"></activity><activity android:name=".UninstallerActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:excludeFromRecents="true"android:theme="@android:style/Theme.DeviceDefault.Dialog.NoActionBar"><intent-filter><action android:name="android.intent.action.DELETE" /><action android:name="android.intent.action.UNINSTALL_PACKAGE" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="package" /></intent-filter></activity><activity android:name=".UninstallAppProgress"android:configChanges="orientation|keyboardHidden|screenSize"></activity><!–<receiver android:name=".RemoveReceiver"><intent-filter><action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" /><data android:scheme="package" /></intent-filter></receiver>–></application></manifest>

安装和卸载APP主要用到了PackageInstallerActivity和UninstallActivity。

安装一个应用程序的过程如下:

String fileName = Environment.getExternalStorageDirectory() + "/myApp.apk"; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); startActivity(intent); 卸载一个应用程序的过程如下:Uri packageURI = Uri.parse("package:com.android.myapp"); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); startActivity(uninstallIntent); 默认是不支持非市场安装的,这里可判断一下:int result = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0); if (result == 0) { // show some dialog here // … // and may be show application settings dialog manually Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_SETTINGS); startActivity(intent); }

听过许多故事,见过旅行风景,就这样,

Android PackageInstaller 安装和卸载

相关文章:

你感兴趣的文章:

标签云: