studio reproductor para musica mediaplayer implementar hacer fuente fondo ejemplo detener como codigo android audio share

reproductor - Obtiene el URI del archivo.mp3 almacenado en la carpeta res/raw en android



reproductor de musica para android codigo fuente (6)

Aquí hay algunos métodos que pueden ayudar a alguien:

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); }

Simplemente llame al método de esta manera:

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

Tengo muchos archivos .mp3 almacenados en la carpeta res / raw.

Estoy obteniendo el URI del archivo .mp3 usando el siguiente código.

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

Esto devuelve: android.resource:///com.my.android.sharesound/2130968609

Ahora estoy usando este URI para crear Compartir intención

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

Cuando selecciono cualquier aplicación de correo, p. Ej. Gmail o YahooMail de Share Intent, el archivo mp3 se adjuntó correctamente. Pero muestra que 2130968609 (como archivo adjunto)

No quiero que aparezca resourceId (2130968609).

Quiero mostrar fileName.mp3

¿Cómo puedo hacer eso? Me estoy perdiendo de algo ?

O

¿Hay alguna otra forma de adjuntar el archivo .mp3 almacenado en res / raw al correo a través de Share Intent?


Aquí hay una forma limpia de obtener cualquier recurso,

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


Esto funciona como magia: suponiendo que el mp3 se guarda en la carpeta sin formato como

notification_sound.mp3

entonces simple haciendo esto funciona:

Uri uri=Uri.parse("android.resource://"+getPackageName()+"/raw/notification_sound");


Finalmente, después de buscar mucho, encontré la solución.

Si desea obtener un URI de recursos, puede hacerlo de dos maneras:

  1. Usando el nombre del recurso

    Sintaxis: android.resource://[package]/[res type]/[res name]

    Ejemplo: Uri.parse("android.resource://com.my.package/drawable/icon");

  2. Usar el Id. De recursos

    Sintaxis: android.resource://[package]/[resource_id]

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

Estos fueron los ejemplos para obtener el URI de cualquier archivo de imagen almacenado en una carpeta dibujable.

Del mismo modo, puede obtener URI de la carpeta res / raw.

En mi caso, utilicé la primera vía, es decir. Usando el nombre del recurso


Intente guardar el archivo en su tarjeta SD y luego envíe el nuevo 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; }

Recuerde eliminar el archivo después de que el correo electrónico se haya enviado correctamente.


Una línea Respuesta

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