1、通過(guò)Intent機(jī)制,調(diào)出系統(tǒng)安裝應(yīng)用,重新安裝應(yīng)用的話,會(huì)保留原應(yīng)用的數(shù)據(jù)。
- String fileName = Environment.getExternalStorageDirectory() +apkName;
- Uri uri = Uri.fromFile(new File(fileName));
- Intent intent =new Intent(Intent.ACTION_VIEW);
- intent.setDataAndType(uri,"application/vnd.android.package-archive");
- startActivity(intent);
2、直接調(diào)用安裝接口。
- Uri mPackageURI = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + apkName));
- int installFlags = 0;
- PackageManager pm = getPackageManager();
- try
- {
- PackageInfo pi = pm.getPackageInfo(packageName,
- PackageManager.GET_UNINSTALLED_PACKAGES);
- if(pi !=null)
- {
- installFlags |= PackageManager.REPLACE_EXISTING_PACKAGE;
- }
- }
- catch (NameNotFoundException e)
- {}
- PackageInstallObserver observer =new PackageInstallObserver();
- pm.installPackage(mPackageURI, observer, installFlags);
安裝應(yīng)用權(quán)限:android.permission.INSTALL_PACKAGES
系統(tǒng)應(yīng)用(安裝在/system/app下面)可以采用該方式,第三方應(yīng)用無(wú)法申請(qǐng)安裝卸載權(quán)限。
java.lang.SecurityException: Neither user 10039 nor current process has android.permission.INSTALL_PACKAGES.
3、執(zhí)行install命令。
install –r 更新安裝,默認(rèn)新安裝;如果不附上-r參數(shù),則會(huì)清楚原應(yīng)用的數(shù)據(jù),版本一致則無(wú)法安裝。
(1)am start …
(2)Runtime.exec(String[]
args)
(3)Class<?>
execClass = Class.forName("android.os.Exec");
4、執(zhí)行cp / adb push命令。
由系統(tǒng)檢測(cè)到應(yīng)用程序有更新,自動(dòng)完成重新安裝。
卸載程序的方法:
1、通過(guò)Intent機(jī)制,調(diào)出系統(tǒng)卸載應(yīng)用。
- UripackageURI = Uri.parse("package: your.app.id");
- Intent intent =new Intent(Intent.ACTION_DELETE);
- startActivity(intent);
2、直接調(diào)用卸載接口。
- PackageInstallObserver observer =new PackageInstallObserver();
- pm.installPackage(mPackageURI, observer, installFlags);
卸載應(yīng)用權(quán)限:android.permission.DELETE_PACKAGES
3、運(yùn)行rm apk安裝文件,由系統(tǒng)檢測(cè)后調(diào)用卸載應(yīng)用。
|