记录一次解决安装 Apk 兼容性问题

  • 时间:
  • 浏览:0
  • 来源:大发5分快3APP下载_大发5分快3APP官方

com.android.packageinstaller/u0a21} (pid=16425, uid=40021) that is not exported from uid 10340

context.startActivity(intent);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

}

//查询所有符合 intent 跳转目标应用类型的应用,注意此方式须要放置setDataAndType的方式后来

provider属性说明

}

//加在对目标应用临时授权该Uri所代表的文件

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

apkUri = Uri.fromFile(apkFile);

path做如下声明

举个例子说明:

apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);

问题报告 描述

intent.setDataAndType(apkUri,

<external-path name="*name*" path="*path*" />

代码执行安装Apk,突然出现系统弹框解析错误,解析包时突然出现错误

apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);

对应路径:Context.getFileDir()+"/${path}/"

问题报告

res包下创建file_path.xml

后来,在上文描述的场景中依然报出了错误:

<?xml version="1.0" encoding="utf-8"?>

}

这里还都还都可以创建太满 太满 个paths,后来每个paths的name非要一样

"application/vnd.android.package-archive");

public static void installApk(Context context,File apkFile){

android:name="android.support.v4.content.FileProvider"

path 说明

<meta-data

根据系统log分析,猜测在锁屏时,用于安装Apk的service处于休眠机会不可用的情況,意味 通过intent.addflags方式赋予的临时权限失效了。于是,再次仔细看一遍官方文档后,发现还另三个 方式,还都还都可以生成权限且在主动调用方式机会手机重启后才会失效。

<files-path name="*name*" path="*path*" /> 对应的是:Context.getFileDir()的路径地址

}

<external-files-path name="*name*" path="*path*" />

问题报告 定位

intent.setDataAndType(apkUri,

<external-cache-path name="*name*" path="*path*" />

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

} else {

e.printStackTrace();

改进后的代码

对应路径: Context.getExternalCacheDir()+"/${path}/"

//判断版本算是 7.0 及 7.0 以上

}

对应路径:Context.getExternalStorageDirectory()+"/${path}/"

对应路径:Context.getCacheFir()+"/${path}/"

本文来自云栖社区公司合作 者伙伴“安卓巴士Android开发者门户”,了解相关信息还都还都可以关注“安卓巴士Android开发者门户”。

在华为P20 Android 8.0 手机上,下载Apk并使用通知栏进度条显示,开启应用锁屏通知权限,下载过程在锁屏情況下进行,下载完成后自动执行安装Apk,在解锁后突然出现系统弹框,解析包突然出现错误。

android:name="android.support.FILE_PROVIDER_PATHS"

得到路径:content://${applicationId}/&{name}/

android:resource="@xml/file_path" />

</paths>

android:grantUriPermissions="true">

android:exported="false"



public static void installApk(Context context,File apkFile){

得到路径:content://${applicationId}/&{name}/

Intent intent = new Intent(Intent.ACTION_VIEW);

首先在AndroidManifest中声明fileProvider

场景

懵逼.jpg

<cache-path name="*name*" path="*path*" />

得到路径:content://${applicationId}/&{name}/

得到路径:content://${applicationId}/&{name}/

try {

//判断版本算是 7.0 及 7.0 以上

再次尝试,此问题报告 再没有突然出现。

name="internal_path"

OK,以上而是其他同学普遍正确处理7.0,以及8.0版本兼容问题报告 的方式。

context.startActivity(intent);

context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);

} catch (Exception e) {

android:authorities="${applicationId}.fileprovider"

</paths>

path="test" />

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

得到路径:content://${applicationId}/&{name}/

path="test" />

intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

try {

<provider

File imagePath = new File(Context.getFilesDir(), "images");

opening provider android.support.v4.content.FileProvider from ProcessRecord{cc3ad2316425:

intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

经过短暂的懵逼后,后来刚现在开始了了通过各种方式,探索问题报告 的意味 。

本文作者:bear~

Uri contentUri = getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);

Android 8.0系统须要声明权限

安装apk的方式(7.0版本兼容问题报告 )

contentUri值为:content://com.mydomain.fileprovider/my_images/default_image.jpg

<paths xmlns:android="http://schemas.android.com/apk/res/android">

} else {

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

<cache-path

<files-path name="my_images" path="images/"/>

Uri apkUri = null;

for (ResolveInfo resolveInfo : resInfoList) {

String packageName = resolveInfo.activityInfo.packageName;

Uri apkUri = null;

<paths xmlns:android="http://schemas.android.com/apk/res/android">

File newFile = new File(imagePath, "default_image.jpg");

apkUri = Uri.fromFile(apkFile);

对应路径:Environment.getExternalStorageDirectory()+"/${path}/"

name="external_path"

正确处理后来安装Apk的方式

//后来完整版授权

}

原文发布时间为:2018-11-9

e.printStackTrace();

<external-path

java.lang.SecurityException: Permission Denial:

//加在对目标应用临时授权该Uri所代表的文件

} catch (Exception e) {

Intent intent = new Intent(Intent.ACTION_VIEW);

}

</provider>

"application/vnd.android.package-archive");