无法在Device Admin App中手动安装应用程序

时间:2016-09-23 06:00:31

标签: android android-intent apk package-managers device-admin

我想要通过手动安装更新设备管理员应用。问题是当应用处于管理模式时我没有得到安装弹出由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();
        }
    }

我对包管理器进行了很少的研究并遇到了这个解决方案,但这在我的情况下不起作用

简而言之,我想通过手动安装来更新我的设备管理员应用程序。

任何帮助将不胜感激

0 个答案:

没有答案