最近作了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