在我的资源文件夹中,我有一个apk文件,我的目标是在按钮click.I写一个函数,可以读取apk并生成文件,无法安装它。这是我的功能
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="app.js" verb="*" modules="iisnode"/>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</handlers>
<rewrite>
<rules>
<rule name="DynamicContent">
<match url="/*" />
<action type="Rewrite" url="app.js"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我这样称呼这个函数
private File prepareApk(String assetName) {
byte[] buffer = new byte[8192];
InputStream is = null;
FileOutputStream fout = null;
try {
is = getAssets().open(assetName);
fout = openFileOutput("tmp.apk", Context.MODE_PRIVATE);
int n;
while ((n=is.read(buffer)) >= 0) {
fout.write(buffer, 0, n);
}
} catch (IOException e) {
Log.i("InstallApk", "Failed transferring", e);
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fout != null) {
fout.close();
}
} catch (IOException e) {
}
}
return getFileStreamPath("tmp.apk");
}
没有例外,没有警告,只是无法安装它。这是我的gradle文件源
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(Uri.fromFile(prepareApk("myapk.apk")));
startActivity(intent);
} 我怎么能解决我的问题?感谢
答案 0 :(得分:0)
其他应用 - 包括安装程序 - 无权访问您应用的内部存储空间。此外,在Android 7.0及更高版本中,您将使用FileUriExposedException
崩溃。
在Android 7.0及更高版本中,您需要使用FileProvider
来提供该文件,FileProvider.getUriForFile()
将Uri
放入Intent
。
在Android 6.0及更早版本中,您必须将文件保存到外部存储空间(例如getExternalCacheDir()
)。