J'ai quelques problèmes avec les éléments suivants.Message non affiché lorsque le lecteur de pdf n'est pas installé
Lorsqu'un fichier est téléchargé, j'affiche une notification à l'utilisateur, quand il/elle tabs la notification, il recherche l'application correspondante (exemple de lecteur PDF) pour ouvrir le fichier avec.
Tout fonctionne quand j'affiche la notification mais quand aucun lecteur PDF n'est installé aucun message toast n'est affiché à l'utilisateur.
Quelqu'un pourrait m'aider s'il vous plaît? Je sais que le bloc try est vide car je ne sais pas exactement ce qu'il y a dedans pour invoquer le message toast.
Merci.
EDIT: Cela fonctionne quand je décommenter "context.startActivity (target);" mais cela démarre le processus ouvert automatiquement, il devrait commencer lorsque l'utilisateur tabule la notification.
Code de notification:
if (file.getName().endsWith(".pdf")) {
Intent install = openPdf(urlPath, context, mNotificationManager,
NOTIFYCATIONID);
PendingIntent pending = PendingIntent.getActivity(context, 0, install, 0);
mBuilder = new NotificationCompat.Builder(context)
.setContentTitle(appName)
.setContentText("ready to open pdf.");
mBuilder.setContentIntent(pending);
mBuilder.setSmallIcon(R.drawable.placeholder);
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify((int) System.currentTimeMillis(), mBuilder.build());
}
code
pour ouvrir le fichier PDF:
public static Intent openPdf(String urlPath, Context context,
NotificationManager mNotificationManager, int NOTIFYCATIONID) {
File file = new File(urlPath);
MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext = file.getName().substring(file.getName().lastIndexOf(".")+1);
String type = mime.getMimeTypeFromExtension(ext).toLowerCase();;
Intent target = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
target.setDataAndType(Uri.fromFile(file), type);
target.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
try {
//context.startActivity(target);
} catch (ActivityNotFoundException e) {
Toast.makeText(context, "No application found to open PDF, please install one.", Toast.LENGTH_SHORT).show();
}
mNotificationManager.cancel(NOTIFYCATIONID);
return target;
}
Thx Marcin, j'obtiens une erreur indiquant que resolveActivity (PackageManager) ne peut pas être appliqué à (PackageManager, int). J'ai placé votre code dans la méthode openPDF. (target.resolveActivity (pm, PackageManager.MATCH_DEFAULT_ONLY) == null) – Simon
Oui, désolé. La méthode devrait être appelée le pm pas sur l'intention. J'ai mis à jour ma réponse. –
Et comme plusieurs approches équivalentes sont mentionnées dans les réponses à des questions similaires, je viens de les énumérer toutes. –