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?.
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:
Utilisation du nom de la ressource
Syntaxe: Android.resource://[package]/[res type]/[res name]
Exemple: Uri.parse("Android.resource://com.my.package/drawable/icon");
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
Cela fonctionne comme par magie:
notification_sound.mp3
alors faire simple cela fonctionne:
Uri uri=Uri.parse("Android.resource://"+getPackageName()+"/raw/notification_sound");
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");
Réponse en une ligne
RingtoneManager.getRingtone(getContext(),Uri.parse("Android.resource://com.my.package/" + R.raw.fileName)).play();
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é.
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"));