Je ne peux ouvrir aucun fichier depuis le dossier de téléchargement.
Je peux télécharger un fichier et enregistrer dans le dossier de téléchargement avec ceci:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDescription(descricao);
request.setTitle(titulo);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, nome);
enq = downloadManager.enqueue(request);
Après cela, mon fichier est correctement enregistré dans le dossier répertoire: Android >> Stockage partagé interne >> Télécharger. *** Ce chemin que je vois ouvrir manuellement le hd de l'appareil dans ubuntu. Comme le montre l'image le chemin. Android HD par dossier ubuntu - voir le chemin
Et j'essaye d'ouvrir ce fichier avec ceci:
downloadManager = (DownloadManager)getContext().getSystemService(DOWNLOAD_SERVICE);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(enq);
Cursor c = downloadManager.query(query);
if(c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
if(DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
if (uriString.substring(0, 7).matches("file://")) {
uriString = uriString.substring(7);
}
File file = new File(uriString);
Uri uriFile = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".fileprovider", file);
String mimetype = "application/pdf";
Intent myIntent = new Intent(Intent.ACTION_VIEW);
myIntent.setDataAndType(uriFile, mimetype);
Intent intentChooser = Intent.createChooser(myIntent, "Choose Pdf Application");
startActivity(intentChooser);
}
}
}
}
};
getContext().registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
Je déclare mon fournisseur de fichiers en manifeste avec ceci:
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="${applicationId}.fileprovider"
Android:exported="false"
Android:grantUriPermissions="true">
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/provider_paths"/>
</provider>
et avec ça:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
<external-path name="Download" path="Download/"/>
</paths>
Mais lorsque je clique sur le bouton pour télécharger, je reçois ce message: "Ce fichier n'est pas accessible. Vérifiez l'emplacement ou le réseau et réessayez."
Reprise:
1 - Le fichier est téléchargé et enregistré dans le dossier du répertoire.
2 - L'intention est lancée, mais le fichier n'est pas ouvert.
3 - Le mode de débogage me donne ceci dans "nouveau fichier (urlString)": "urlString =/storage/emulated/0/Download/name.pdf"
4 - Dans "FileProvider.getUriFromFile ...", le mode de débogage a ceci:
"uriFile = content: //com.example.Android.parlamentaresapp.fileprovider/Download/name.pdf"
Merci.
Appelez addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
sur le Intent
que vous utilisez avec startActivity()
et le FileProvider
Uri
. Sans cela, l'activité n'a aucun droit d'accéder à votre contenu.