DownloadManager COLUMN_LOCAL_FILENAME obsolète

Sur Android N, je reçois une exception. C'est un problème connu par la documentation, qui me demande d'utiliser ContentResolver.openFileDescriptor ()

Https://developer.android.com/reference/android/app/DownloadManager.html#COLUMN_LOCAL_FILENAME

Je ne sais pas trop comment utiliser. Où est l'objet ContentResolver ici que je peux utiliser pour obtenir le nom de fichier? Je ne l'ai jamais utilisé. Donc, j'apprécierai toute aide.

08-04 11: 20: 59.765 7010 7290 W System.err: java.lang.SecurityException: COLUMN_LOCAL_FILENAME est obsolète; Utilisez ContentResolver.openFileDescriptor () à la place

08-04 11: 20: 59.765 7010 7290 W System.err: à android.app.DownloadManager $ CursorTranslator.getString (DownloadManager.java: 1499)

Voici mon code.

DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(id); Cursor cursor = downloadManager.query(query); final String downloadFilePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); cursor.close(); 

J'ai essayé le downlaodManager.getFileUri, mais ce n'est pas ce que je recherche. Appréciez toute aide.

Merci

  • Comment utiliser DownloadManager dans ArrayAdapter
  • Afficher la progression de Download Manager Manager dans l'activité
  • Comment faire une pause en utilisant DownloadManager?
  • Comment mettre à jour la barre de progression dans un élément ListView
  • Gestionnaire de téléchargement d'Android terminé
  • Comment programmer la limite d'utilisation de données définie par l'utilisateur sur la configuration du système d'exploitation Android?
  • Existe-t-il une pause pour Download Manager dans Android?
  • Comment faire pour activer le Gestionnaire de téléchargement d'Android
  • 5 Solutions collect form web for “DownloadManager COLUMN_LOCAL_FILENAME obsolète”

    Utilisez le getUriForDownloadedFile pour obtenir Uri téléchargé.

     DownloadManager downloadManager = DownloadManager.class.cast(getSystemService(DOWNLOAD_SERVICE)); Uri uri = downloadManager.getUriForDownloadedFile(id); 

    Voici ce qui suit pour moi:

      String downloadFilePath = null; String downloadFileLocalUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); if (downloadFileLocalUri != null) { File mFile = new File(Uri.parse(downloadFileLocalUri).getPath()); downloadFilePath = mFile.getAbsolutePath(); } 

    Vous pouvez réduire le targetSdk de moins de 24 dans gradle. En fait, cette approche n'est pas une approche recommandée, mais nous pouvons surmonter cette erreur en diminuant la cible sdk 23 ou n'importe quoi (mais moins de 24).

     String downloadFileLocalUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 

    La méthode ci-dessus peut provoquer CursorIndexOutOfBoundsException en cas de liste de lignes vide.

    Un curseur est un objet positionné avant la première entrée. Nous devrions d'abord vérifier s'il y a un résultat. Voici mon exemple:

     int index = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI); if (cursor.moveToFirst()) { String downloadFileLocalUri = cursor.getString(index); if (downloadFileLocalUri != null) { File mFile = new File(downloadFileLocalUri); downloadFileName = mFile.getName(); downloadFilePath = mFile.getAbsolutePath(); } } cursor.close(); 

    Pour ceux qui trouvent cela utile

    J'ai dû utiliser DownloadManager.COLUMN_URI
    Au lieu de DownloadManager.COLUMN_LOCAL_URI


    Voici mes résultats pour chaque colonne respective

    1. c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)) -> contenu: // téléchargements / my_downloads / 46

    2. c.getString(c.getColumnIndex(DownloadManager.COLUMN_URI)) -> http://test-domain.com/files/encrypted/212125/bsd1e-411cd7-e3229fb-fdddsa12a974.pdf

    3. c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)) -> http://test-domain.com/files/encrypted/212125/bsd1e-411cd7-e3229fb-fdddsa12a974.pdf

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.