【发布时间】:2017-01-25 10:11:32
【问题描述】:
我的应用程序从 Internet 下载文件并将其保存到“下载”文件夹中,并提供通知,该文件已下载。当我单击通知时,我创建了选择器意图来选择一个应用程序来打开文件。但是,我选择的任何应用程序都不会打开带有错误消息的文件:“无法打开文件”,但是当我转到文件管理器时,它可以正常打开。我想这与权限有关吗? 顺便说一句,Uri 是这样获得的(Android 7.1):
Uri fileUri = FileProvider.getUriForFile(getActivityContext(), getAppContext().getPackageName() + ".provider", file);
这是我的通知代码:
private Notification downloadCompleteNotification(String title, String message, Uri uri) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setDataAndType(uri, "*/*");
Intent chooser = Intent.createChooser(intent, getResources().getString(R.string.open_file_with));
NotificationCompat.Builder builder = initBasicBuilder(title, message, intent);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_u));
builder.setOngoing(false);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, chooser, 0);
builder.setContentIntent(pendingIntent);
return builder.build();
}
private NotificationCompat.Builder initBasicBuilder(String title, String text, Intent intent) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.drawable.u)
.setContentTitle(title)
.setContentText(text);
if (intent != null) {
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this);
taskStackBuilder.addNextIntentWithParentStack(intent);
}
return builder;
}
【问题讨论】:
-
你的安卓版本?
-
如我所说:android 7.1。
-
哦,我错过了。您是否授予了 READ_EXTERNAL_STORAGE 运行时权限?
-
我已经在 Manifest 文件中定义了它,但我没有在运行时。我现在会调查一下。
-
No.. 你应该为最新版本做运行时权限.. 试试看.. 这里是可以帮助你的链接:sitepoint.com/requesting-runtime-permissions-in-android-m-and-n
标签: android android-volley android-notifications android-pendingintent