今天在做一个实现应用内更新的模块,在把下载的apk文件存入外部存储是遇到一个问题,最后终于解决了。现将过程记录下来。
我们知道,android分内部存储和外部存储,我们通常的理解就是除了sd卡的就是内部存储,而sd就是外部存储。现在大部分手机都没有sd卡,而是16G,8G什么的,其中并不是全部是内部存储,而是有一部分是像SD卡一样也是外部存储。
我们的应用程序就是处于内部存储,他的路径是data/data/<包名>,如果我们想把下载的文件下载在这里,调用Context类的getFileDir()就可以了,但是这样的话,该apk处于应用内部,就无法被其他应用程序使用了,使用如下代码去执行安装时,就会失败了:
/**
* 安装新版本应用
*/
private void installApp() throws Exception{
if(!file.exists()) {
return;
}
// 跳转到新版本应用安装页面
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + file.getPath()),"application/vnd.android.package-archive");
context.startActivity(intent);
}
所以我们需要下载到外部存储中,调用Context类的getExternalFilesDir()就可以了,另外需要在清单文件中添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
这样确实下载成功了,但是之后在华为E887(可能记错,但没关系)中出错&#x