获取存储在android的res / raw文件夹中的.mp3文件的URI
我有很多.mp3文件存储在res / raw文件夹中。
我正在使用以下代码获取.mp3文件的URI。
Uri.parse("android.resource:///com.my.android.sharesound/"+resId);
这将返回: android.resource:///com.my.android.sharesound/2130968609
现在我正在使用这个URI来创build共享意图
shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("android.resource://com.my.android.sharesound/"+resId)); startActivity(Intent.createChooser(shareIntent,"Share Sound");
当我select任何邮件应用程序,例如。 从Share Intent的Gmail或YahooMail,mp3文件成功附加。 但是这表明2130968609(作为附件)
我不希望resourceId(2130968609)出现。
我想显示fileName.mp3
我怎样才能做到这一点? 我错过了什么?
要么
是否有任何其他方式来附加.mp3文件存储在res /原始邮件通过共享意向。
最后,我search了很多,我find了解决办法。
如果你想获得任何资源的URI,那么有两种方法:
-
使用资源名称
语法:
android.resource://[package]/[res type]/[res name]
例如:
Uri.parse("android.resource://com.my.package/drawable/icon");
-
使用资源ID
语法:
android.resource://[package]/[resource_id]
例如:
Uri.parse("android.resource://com.my.package/" + R.drawable.icon);
这是获取存储在可绘制文件夹中的任何图像文件的URI的示例。
同样,您可以获取res / raw文件夹的URI。
在我的情况下,我用第一种方法,即。 使用资源名称
这个工作就像魔术一样:假设mp3被保存在原始文件夹中
notification_sound.mp3
那么简单的做这个工作:
Uri uri=Uri.parse("android.resource://"+getPackageName()+"/raw/notification_sound");
尝试将文件保存到您的SDCard,也许然后发送新的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; }
请记得在电子邮件发送成功后删除文件。
这是一个干净的方式来获得任何资源,
Uri.parse(String.format("android.resource://%s/%s/%s",this.getPackageName(),"resource_folder_name","file_name"));