180 votes

Android: Obtenir un fichier Uri à partir d'un contenu Uri?

Donc, dans mon application l'utilisateur de sélectionner un fichier audio à l'application gère ensuite. Le problème que j'ai, c'est que pour l'application pour faire ce que je veux faire avec les fichiers audio, j'ai besoin de l'Uri pour être dans le format de fichier. Lorsque j'utilise Android natif du lecteur de musique pour rechercher le fichier audio dans l'application, l'Uri est un Contenu uri, qui ressemble à ceci:

content://media/external/audio/media/710

Cependant, l'utilisation de la populaire application gestionnaire de fichiers Astro, je reçois le texte suivant:

file:///sdcard/media/audio/ringtones/GetupGetOut.mp3

Le dernier est beaucoup plus accessible pour moi de travailler avec, mais bien sûr, je veux de l'application pour avoir des fonctionnalités avec le fichier audio de l'utilisateur choisit quel que soit le programme qu'ils utilisent pour parcourir leur collection. Donc ma question est, est-il un moyen de convertir le contenu:// style Uri dans un fichier:// Uri? Sinon, que recommanderiez-vous pour moi à résoudre ce problème? Voici le code qui appelle le sélecteur de référence:

Intent ringIntent = new Intent();
            ringIntent.setType("audio/mp3");
            ringIntent.setAction(Intent.ACTION_GET_CONTENT);
            ringIntent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE);

Merci beaucoup! S'il vous plaît laissez-moi savoir si je peux fournir plus de code pour vous aider à répondre.

Je ne les suivants avec le contenu Uri:

m_ringerPath = m_ringtoneUri.getPath(); File file = new File(m_ringerPath);

Puis certains FileInputStream des trucs avec ce dossier.

185voto

Jason LeBrun Points 6130

Il suffit d'utiliser getContentResolver().openInputStream(uri) pour obtenir un InputStream d'un URI.

http://developer.android.com/reference/android/content/ContentResolver.html#openInputStream(android.net.Uri)

50voto

nobre Points 2019

Vous pouvez utiliser le résolveur de contenu pour obtenir un fichier: // chemin à partir du contenu: // URI:

                 String filePath = null;
                Uri _uri = data.getData();
                Log.d("","URI = "+ _uri);                                       
                if (_uri != null && "content".equals(_uri.getScheme())) {
                    Cursor cursor = this.getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
                    cursor.moveToFirst();   
                    filePath = cursor.getString(0);
                    cursor.close();
                }
                else {
                    filePath = _uri.getPath();
                }
                Log.d("","Chosen path = "+ filePath);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X