我有一个copy an Audio file from raw folder to SD card
的方法。它需要两个输入
更新
public boolean saveas(int ressound, String fName){
byte[] buffer=null;
InputStream fIn = getBaseContext().getResources().openRawResource(ressound);
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/music/[my_package_name]/";
String filename=fName+".ogg";
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String completePath = baseDir + File.separator + "music" + File.separator + "my_package" + File.separator + filename;
boolean exists = (new File(completePath)).exists();
if (!exists){new File(completePath).mkdirs();}
FileOutputStream save;
try {
save = new FileOutputStream(completePath);
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;
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));
File k = new File(path, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "exampletitle");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, true);
//Insert it into the database
this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);
return true;
}
如果方法返回true,则文件正确保存到SD卡。如果返回false,则表示存在错误。在我的例子中,该方法在进入FileNotFoundException
块时返回false。我找不到为什么!!一切似乎都很好。
如果您问我是否添加了WRITE权限,我将其添加到Manifest文件中的应用程序标记:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
请帮忙吗?
答案 0 :(得分:2)
将此用于路径:
string baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
string path = baseDir + File.Separator + "music" + File.Separator + "yourpackagename" + filename;
答案 1 :(得分:0)
请不要硬编码路径。使用Environment.getExternalStorageDirectory()获取大型存储介质的路径。有些手机在/ mnt / sdcard或其他地方安装sdcards,有些只是没有,并依赖内置闪存。
这可能会引发错误,但我不认为是这种情况下的错误,因为您可能正在测试适用此路径的手机/模拟器。
答案 2 :(得分:0)
我的问题与代码无关。这是权限相关的事情。我在application tag
内添加了权限。它必须在它之外。它必须位于root tag
。
连接我,因为将它放在application tag
而不是Manifest tag
中是有道理的!
感谢您的回答!