之前写过一篇关于Android版本更新的博客,又不知道怎么写版本更新的,可以去看这篇博客,今天这篇博客主要是总结,版本更新失败的原因会有那些,这里大家对比一下,看哪里没有写上,自行添加!! 安卓版本更新的博客地址:安卓检测版本更新
下面就是版本更新失败的原因有以下几点: 一、权限
<!-- 写 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 8.0手机安装软件 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!-- 允许装载和卸载文件系统权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
二、检测是否有开启读写权限,没有弹出框提示开启
private static String[] PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE };
private static int REQUEST_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.e(Thread.currentThread().getStackTrace()[2] + "", "checkSelfPermission: " + checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE));
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(PERMISSIONS, REQUEST_PERMISSION_CODE);
}
}
......
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CODE) {
for (int i = 0; i < permissions.length; i++) {
Log.e(Thread.currentThread().getStackTrace()[2] + "", permissions[i] + ": " + grantResults[i]);
}
}
}
三、数据 AndroidManifest中的配置
<!-- 7.0安装 -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="cn.xu.test.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
在res下创建一个xml文件,在xml文件下创建file_paths.xml文件
<paths>
<external-path
name="files_root"
path="Android/data/cn.soujianzhu/" />
<external-path
name="external_storage_root"
path="." />
</paths>
这里在安装apk包时也要对应上
protected void installApk(File file) {
if (!file.exists()) {
Toast.makeText(this, "下载的安装包不存在", Toast.LENGTH_SHORT).show();
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri apkUri = FileProvider.getUriForFile(this,
"cn.xu.test.FileProvider", file);
Intent install = new Intent(Intent.ACTION_VIEW);
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
install.setDataAndType(apkUri, "application/vnd.android.package-archive");
this.startActivity(install);
} else {
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(install);
}
}
五、这个情况一般在Android10会发生下载失败 在Mainfest Application中加入这一行android:requestLegacyExternalStorage=“true”
<manifest ... >
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
好啦,目前就总结到这里,这是我撸代码过程中所遇到的问题,后续如果还会有其他方面的问题,我也会持续更新!
|