Я загружаю PDF, используя модифицированный веб-сервис. И затем я показываю самостоятельно созданное уведомление, чтобы показать, что файл был загружен. Но я не могу понять, как показать или открыть файл при нажатии на уведомление.
Вот мой звонок-уведомление:
RestClient.webServices()
.downloadFile(id)
.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
boolean writtenToDisk = writeResponseBodyToDisk(response.body());
Log.e(TAG, "file download was a success? " + writtenToDisk);
if (writtenToDisk) {
showToast("Invoice downloaded successfully");
showDownloadNotification();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
Вот функция writeResponseBodyToDisk ():
private boolean writeResponseBodyToDisk(ResponseBody body) {
try {
// todo change the file location/name according to your needs
File futureStudioIconFile = new File(Environment.getExternalStorageDirectory() + File.separator + "/bill.pdf");
InputStream inputStream = null;
OutputStream outputStream = null;
try {
byte[] fileReader = new byte[4096];
long fileSize = body.contentLength();
long fileSizeDownloaded = 0;
inputStream = body.byteStream();
outputStream = new FileOutputStream(futureStudioIconFile);
while (true) {
int read = inputStream.read(fileReader);
if (read == -1) {
break;
}
outputStream.write(fileReader, 0, read);
fileSizeDownloaded += read;
// Log.d(TAG, "file download: " + fileSizeDownloaded + " of " + fileSize);
}
outputStream.flush();
return true;
} catch (IOException e) {
return false;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
} catch (IOException e) {
return false;
}
}
А вот функция showDownloadNotification ():
void showDownloadNotification() {
try {
Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() + File.separator + "/invoice.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, "resource/folder");
// startActivity(intent);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_logo_winds)
.setContentTitle("Invoice downloaded")
.setContentText("")
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
// notificationId is a unique int for each notification that you must define
notificationManager.notify(1, builder.build());
} catch (Exception e) {
Log.e(TAG, "Notification " + e.toString());
}
}
Поэтому, когда я нажимаю на созданное уведомление, ничего не происходит, и когда я раскомментирую startActivity (намерение); он падает, говоря, что не может найти активность для намерения.
Как открыть загруженный файл, щелкнув созданное для него уведомление?