我想要通过手动安装更新设备管理员应用。问题是当应用处于管理模式时我没有得到安装弹出由android生成安装 apk < / strong>但取消固定或删除应用程序作为设备管理员我得到的安装对话框。我已经找到了两种方法
第一种方法:使用意图安装apk
Intent intentInstall = new Intent(Intent.ACTION_VIEW);
intentInstall.setDataAndType(Uri.fromFile(new File(Constants.UPDATE_APK_PATH)), "application/vnd.android.package-archive");
intentInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
AppApplication.getContext().startActivity(intentInstall);
此方法仅在app未设置为设备管理
时有效第二种方法:使用PackageManger进行无提示安装
PackageManager packageManger = mContext.getPackageManager();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
PackageInstaller packageInstaller = packageManger.getPackageInstaller();
String packageName = mContext.getPackageName();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
try {
int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
OutputStream out = session.openWrite(packageName + ".apk", 0, -1);
readTo(Constants.UPDATE_APK_PATH, out); //read the apk content and write it to out
session.fsync(out);
out.close();
System.out.println("installing...");
session.commit(PendingIntent.getBroadcast(mContext, sessionId,
new Intent("android.intent.action.MAIN"), 0).getIntentSender());
System.out.println("install request sent");
} catch (IOException e) {
e.printStackTrace();
}
}
System.err.println("old sdk");*/
private static void readTo(String updateApkPath, OutputStream out) {
try {
File file = new File(updateApkPath);
out = new FileOutputStream(file);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我对包管理器进行了很少的研究并遇到了这个解决方案,但这在我的情况下不起作用
简而言之,我想通过手动安装来更新我的设备管理员应用程序。
任何帮助将不胜感激