嗨,我在将声音保存为铃声或通知时遇到问题。我不断收到我的烤面包 - 失败 - 检查你的 SDCard
错误在哪里?
代码: http: //pastebin.com/in5ckvk0
ok here is the Sample code that I currently use in my application for Storing Data to my SDCard, have a look and try using this.
File newSoundFile;
ContentResolver mCr;
Log.e("check this tag","path for SDCard:"+Environment.getExternalStorageDirectory().getAbsolutePath());
//storing at: /mnt/sdcard/media
File directoryStructure=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Halloween");
//if directory doesn't exist create a directory if that fails too return false
if(!(directoryStructure.exists())){
if(!(directoryStructure.mkdirs())){
return false;
}
}
/*for(int allRing=0;allRing<ringId.length;allRing++)*/{
newSoundFile = new File(directoryStructure, "/"+HalloweenWallpaper.longPressSelected+".mp3");
Uri mUri = Uri.parse("android.resource://"+getApplication().getPackageName()+"/"+ringId[HalloweenWallpaper.longPressSelected]);
mCr = HalloweenWallpaper.this.getContentResolver();
AssetFileDescriptor soundFile;
try {
soundFile= mCr.openAssetFileDescriptor(mUri, "r");
} catch (FileNotFoundException e) {
soundFile=null;
Log.e("first check", "here --"+e.getMessage());
return false;
}
try {
byte[] readData = new byte[1024];
FileInputStream fis = soundFile.createInputStream();
FileOutputStream fos = new FileOutputStream(newSoundFile);
int i = fis.read(readData);
while (i != -1) {
fos.write(readData, 0, i);
i = fis.read(readData);
}
fos.close();
} catch (IOException io) {
Log.e("Second Check", "--"+io.getMessage());
return false;
}
}
//STORES SUCCESFULLY
问题就在这里
String path=Environment.getExternalStorageDirectory().getPath()+"/sdcard/media/ringtone/";
Environment.getExternalStorageDirectory()
无论如何都会返回 /SDCard 路径,使用其他文件夹名称来存储铃声。像 /yourPackage/media 而不是 /sdcard/media
因为它会被解释为/SDCard/yourPackage/media/
希望能帮助到你