【发布时间】:2017-06-06 06:12:23
【问题描述】:
我已将.apk 文件上传到保管箱。当用户单击即时应用程序中的安装按钮时,我想下载并启动应用程序。但是调用startActivity()后出现如下异常:
原因:java.lang.SecurityException: Permission Denial: 从 ProcessRecord{8593d11 2399:com.google.android.packageinstaller/u0a26} 打开提供程序 android.support.v4.content.FileProvider (pid=2399, uid=10026 ) 不是从 uid 10298 导出的
Intent intent = new Intent(Intent.ACTION_VIEW);
if (intent.resolveActivity(getPackageManager()) == null) {
Log.e("No Packate Manager", intent.getPackage() + "");
return;
}
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //BuildConfig.APPLICATION_ID
// File file = new File(File folder, "app-debug.apk");
//uri = FileProvider.getUriForFile(getApplicationContext(), getPackageName() + ".fileprovider", file);
uri = FileProvider.getUriForFile(getApplicationContext(), getPackageName() + ".fileprovider", new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "app-debug.apk"));
List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
} else {
// uri = Uri.fromFile(new File("/mnt/sdcard/Download/app-debug.apk"));
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File outputFile = new File(folder, "app-debug.apk");
uri = Uri.fromFile(outputFile);
}
intent.setDataAndType(uri, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// install.setDataAndType(myuri, manager.getMimeTypeForDownloadedFile(downloadId));
startActivity(intent);
【问题讨论】:
标签: java android android-intent apk android-instant-apps