如何在设备上安装“捆绑”应用程序(apk),只提示用户一次

时间:2012-08-19 13:24:11

标签: android android-package-managers

我的应用程序基于多个应用程序(每个应用程序都有不同的apk签名)。我想安装一个apk,在一次确认后,设备应该在“bundle”中安装所有应用程序。

我设法安装了应用程序包,但每次安装后我都会在安装之前得到确认(见下文)。

我需要这是一个无缝过程,用户只需要确认一次安装过程。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    installAPK(R.raw.apk0, 0);
}

private void installAPK(int apk, int apk_code) {
    try {


        InputStream in = this.getResources().openRawResource(apk);

        byte[] b = new byte[in.available()];

        int read = in.read(b);

        // String tempFileName = "currentapk.apk";

        FileOutputStream fout = openFileOutput(tempFileName,
                MODE_WORLD_READABLE);

        fout.write(b);
        fout.close();
        in.close();

        File tempFile = getFileStreamPath(tempFileName);

        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(tempFile),
                "application/vnd.android.package-archive");
        startActivityForResult(Intent.createChooser(intent, "install"),
                apk_code);
    }

    catch (Exception ex) {
        ex.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    File tempFile = getFileStreamPath(tempFileName);

    if (tempFile.delete()) {
        Log.d("******PACKAGING******", "FILE DELETED!");
    }

    switch (requestCode) {
    case 0: {

        installAPK(R.raw.apk1, 1);
        break;
    }

    case 1: {
        installAPK(R.raw.apk2, 2);
        break;
    }
          case 2: {
        installAPK(R.raw.apk3, 3);
        break;
    }

我知道如何通过仅提示用户一次来安装它吗?

1 个答案:

答案 0 :(得分:2)

  

我需要这是一个无缝过程,用户只需要确认一次安装过程。

幸运的是,这是不可能的 - 正如zapi所说,出于安全原因。用户有权知道正在安装的内容,并且有权说“不,我不想要”。

当然,欢迎您创建自己的ROM mod,内置所有这些应用程序,然后说服人们安装该ROM。这消除了每个应用程序用户的选择。希望通过预先安装的应用程序分发设备的企业将采用这种方式,不仅是为了避免提示,而且是为了防止人们在获得修改后的设备时卸载这些应用程序。