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

  • Android définit String value dans String.xml
  • Définir EditText imeOptions to actionNext n'a aucun effet
  • Android: augmente AlertDialog à partir du thread d'arrière-plan
  • Android N se bloque dans TextAppearanceSpan
  • Chargez un div dans une vue web sur Android
  • Comment remplir ListPreference de façon dynamique lorsque OnPreferenceClick est déclenché?
  • 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

  • Obtenir une référence à un Fragment d'enfant après que le Fragment parent a été recréé
  • L'allocation de la fenêtre du curseur de base de données SQLite de 2048 kb a échoué
  • Eclipse ne laissera pas mon application fonctionner
  • OnActivityResult () appelé prématurément
  • Android - Comment passer des données à Runnable dans runOnUiThread?
  • Comment supprimer le certificat installé par l'utilisateur par programme?
  • 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.