单击下载完成通知会显示“无法打开文件”吐司?

时间:2019-06-01 11:50:56

标签: android notifications apk

首先在我的应用程序中,我让系统下载器应用程序为我下载了apk。然后,我使用以下代码安装由Android默认下载管理器下载的apk文件:

if (getFileId() == downloadId) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/" + getFileName());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
    Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
    intent.setData(apkUri);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);            
} else {
    Uri apkUri = Uri.fromFile(file);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}                     
}

下载完成并调用下载接收器后,此代码将自动运行。而且效果很好。问题是,如果用户单击默认系统下载管理器发出的通知(“下载完整通知”),在API> = 23中,我会收到“无法打开文件”消息,这很烦人(出于任何原因,用户可能希望点击通知)。我希望用户单击通知时能够安装apk文件,该通知已在api <23上运行。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

与6.0相比,最有可能与Android 7.0处理权限的方式有关。自Android 7.0起,您需要以其他方式请求权限。尝试修改ContextCompat.checkSelfPermission()方法。将显示此消息,因为未使用此方法请求打开文件的权限。以下是一些小片段,可帮助您按正确的方向进行操作:

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {

      ActivityCompat.requestPermissions(thisActivity,
              new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
              YourRequestCode);
}

在这里,thisActivity是您当前的活动。