最近作了apk的默認安裝,是在後檯安裝的,主要實現方法以下,要在源碼環境編譯。 android
private void InstallApk(int allcount) {
AppInfoData info = listapp.get(allcount);//要安裝的列表,我這裏是讀取的配置的json文件
String fileName = info.apkPath; //獲得apk的存放路徑,如/mnt/sdcard/hello.apk
Uri uri = Uri.fromFile(new File(fileName));
int installFlags = 0;
PackageManager pm = getPackageManager();//獲得包管理實例
try {
PackageInfo pi = pm.getPackageInfo(info.packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
if (pi != null) {
// installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
installFlags |= 0x00000002;
}
} catch (NameNotFoundException e) {
}
PackageInstallObserver observer = new PackageInstallObserver();
pm.installPackage(uri, observer, installFlags, info.packageName);//改方法爲隱藏方法
} json
實現下面方法,改方法爲安裝完成後的回調方法,能夠在這裏處理ui app
//import android.content.pm.IPackageInstallObserver;要導入改類 ui
class PackageInstallObserver extends IPackageInstallObserver.Stub {
public void packageInstalled(String packageName, int returnCode) {
System.out.println("packageName============>>>>"+packageName);
System.out.println("returnCode============>>>>"+returnCode); server
dosomesing(); //安裝完畢,作處理 如sendmessage() 從新調用InstallApk(count)安裝下一個。
} }; get
不須要源碼的方法就簡單了 ,但會有系統安裝的彈框,如: 源碼
protected void installApk(File file) {//file爲絕對路徑
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
}; it