从内部存储器下载并安装应用程序(apk) - 没有SD卡

Ume*_*esh 3 android apk

致所有程序员的问候和新年快乐.

我的代码从远程服务器下载apk文件.我需要通过代码启动安装过程,而无需用户明确安装它.问题是,我无法使用SD卡下载apk文件.

我可以导航到data/data/files文件夹,可以看到我的文件已下载.唯一的问题是我无法安装它.这就是我得到的

 '/data/data/org.obs.testinstall.main/files/app.apk': Permission denied 
Run Code Online (Sandbox Code Playgroud)

我知道Android不授予访问数据目录的权限.我的问题是如何在不使用SD卡的情况下下载和安装应用程序(apk).此应用程序不打算在市场上发布.我尝试过使用内部存储器

FileOutputStream fos = openFileOutput("app.apk", Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

和缓存目录

File file = getCacheDir();
File outputFile = new File(file, "app.apk");
Run Code Online (Sandbox Code Playgroud)

两者都给出相同的结果.."权限被拒绝"

当我更改代码以合并SD卡时,应用程序可以正常工作,但使用SD卡不是一种选择.

当然必须有办法做到这一点.很难相信Android O/S存在这样的障碍.

有人这样做过吗?任何解决方法?任何指针都会有所帮助.

han*_*ung 12

它是由android应用程序引起的,如果它是使用PRIVATE模式编写的,则无法从另一个应用程序文件中读取.

你可以这样做:

String fileName = "tmp.apk";
FileOutputStream fos = openFileOutput(fileName,
        MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);

// write the .apk content here ... flush() and close()

// Now start the standard instalation window
File fileLocation = new File(context.getFilesDir(), fileName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(fileLocation),
                       "application/vnd.android.package-archive");
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但要小心,因为该文件现在是世界可见的,并且如果他们知道文件位置,则可以被同一设备中的任何应用程序看到.