web-dev-qa-db-fra.com

Obtenir l'URI du fichier .mp3 stocké dans le dossier res/raw sous Android

J'ai beaucoup de fichiers .mp3 stockés dans le dossier res/raw.

Je reçois l'URI du fichier .mp3 en utilisant le code suivant.

Uri.parse("Android.resource:///com.my.Android.sharesound/"+resId);

Cela retourne: Android.resource:///com.my.Android.sharesound/2130968609

Maintenant, j'utilise cet URI pour créer l'intention de partage.

    shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("Android.resource://com.my.Android.sharesound/"+resId));
    startActivity(Intent.createChooser(shareIntent,"Share Sound");

Lorsque je sélectionne une application de messagerie, par exemple. Gmail ou YahooMail à partir de l’intention de partage, le fichier mp3 est attaché avec succès. Mais cela montre que 2130968609 (en pièce jointe)

je ne veux pas que resourceId (2130968609) apparaisse. 

Je veux afficher le nom de fichier.mp3

Comment puis je faire ça? Est-ce que je manque quelque chose?

OR

Existe-t-il un autre moyen de joindre un fichier .mp3 stocké dans res/raw à un courrier via Share Intent?.

47
Kartik Domadiya

Finalement, après avoir beaucoup cherché, j'ai trouvé la solution.

Si vous voulez obtenir un URI de ressource, il y a deux façons:

  1. Utilisation du nom de la ressource

    Syntaxe: Android.resource://[package]/[res type]/[res name]

    Exemple: Uri.parse("Android.resource://com.my.package/drawable/icon");

  2. Utilisation de l'identifiant de ressource

    Syntaxe: Android.resource://[package]/[resource_id]

    Exemple: Uri.parse("Android.resource://com.my.package/" + R.drawable.icon);

Ce sont les exemples pour obtenir l’URI de n’importe quel fichier image stocké dans un dossier pouvant être dessiné.

De même, vous pouvez obtenir les URI du dossier res/raw.

Dans mon cas, j'ai utilisé la première voie, à savoir. Utilisation du nom de la ressource

151
Kartik Domadiya

Cela fonctionne comme par magie: 

notification_sound.mp3

alors faire simple cela fonctionne:

Uri uri=Uri.parse("Android.resource://"+getPackageName()+"/raw/notification_sound");
31
Andrew Sam

Voici quelques méthodes qui pourraient aider quelqu'un:

    public Uri getRawUri(String filename) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/raw/" + filename);
    }
    public Uri getDrawableUri(String filename) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/drawable/" + filename);
    }
    public Uri getMipmapUri(String filename) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/mipmap/" + filename);
    }

Appelez simplement la méthode comme ceci:

Uri rawUri = getRawUri("myFile.filetype");
2
user9566632

Réponse en une ligne

RingtoneManager.getRingtone(getContext(),Uri.parse("Android.resource://com.my.package/" + R.raw.fileName)).play();
2
Radesh

Essayez d’enregistrer le fichier sur votre carte SD et envoyez ensuite le nouvel URI, 

 public boolean saveAs(int resSoundId){
 byte[] buffer = null;
 InputStream fIn = getBaseContext().getResources().openRawResource(resSoundId);
 int size=0;

 try {
  size = fIn.available();
  buffer = new byte[size];
  fIn.read(buffer);
  fIn.close();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }

 String path = "/sdcard/yourapp/temp/";
 String filename = "filename"+".mp3";

 boolean exists = (new File(path)).exists();
 if (!exists){new File(path).mkdirs();}

 FileOutputStream save;
 try {
  save = new FileOutputStream(path+filename);
  save.write(buffer);
  save.flush();
  save.close();
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  return false;
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }    

N'oubliez pas de supprimer le fichier une fois le courrier électronique envoyé. 

1
Reno

Voici un moyen propre d'obtenir n'importe quelle ressource,

 Uri.parse(String.format("Android.resource://%s/%s/%s",this.getPackageName(),"resource_folder_name","file_name"));
0
Remario