2012-08-05 5 views
2

글쎄, 많은 일을 시도했지만 더 좋은 목표는 원하는 파일을 sd에 복사하는 것이지만 항상 새로운 파일 크기는 0 바이트입니다. (안드로이드 - res/raw 리소스를 SD에 정확하게 복사하십시오.

?!

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
: 문제를 알고 감사를 많이

을 내 매니페스트에 이러한 권한이 내 나쁜 english.Any의 하나

 String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     String fileName = sonidoActual+".mp3"; 

     File newSoundFile = new File(baseDir, fileName); 
     Uri mUri = Uri.parse("android.resource://com.genaut.ringtonelists/raw/"+sonidoActual); 
     AssetFileDescriptor soundFile; 
     try { 
      soundFile= getContentResolver().openAssetFileDescriptor(mUri, "r"); 
     } catch (FileNotFoundException e) { 
      soundFile=null; 
     } 

     try { 
      byte[] readData = new byte[1024*500]; 
      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); 
       Log.d("Degug - While: ", "i: "+i); 
      } 
      fos.flush(); 
      fos.close(); 
     } catch (IOException io) { 
     } 

죄송합니다 :

이 내 코드입니다

더 많은 정보 : assets에서 파일을 복사하고 작동하지 않는 몇 가지 코드를 시도했습니다. 벨소리를 잘 설정하는 일부 앱이 있습니다. 그래서 내 SD에 문제가 있다고 생각하지 않습니다. 나는 희망이 없다 : S

는이 분명히 잘 작동, 자산의 코드입니다 : https://stackoverflow.com/a/4530294/1422434


내가 getResources.openRawResource(): 너무 노력하지만 당신으로

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
String fileName = nombreActual+".mp3"; 

File newSoundFile = new File(baseDir, fileName); 

try { 
    byte[] readData = new byte[1024*500]; 
    InputStream fis = getResources().openRawResource(contexto.getResources().getIdentifier(sonidoActual,"raw", contexto.getPackageName())); 
    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) { 
} 
+2

왜 대신 안드로이드'대부분-불법의'의 GetResources()'와'openRawResource을()'사용하지)'? http://goo.gl/e1JcL – CommonsWare

+0

menifest 파일에 적절한 '권한'을 추가 했습니까?를 (를) 참조하십시오. –

+0

퍼미션과 추가 정보가있는 첫 번째 게시물을 편집했습니다. thaks read – Genaut

답변

1

를 작동 원시 폴더를 사용하고, 단순히 활동에서 이것을 사용 : (resource` 방식과`openAssetFileDescriptor :

getResources().openRawResource(resourceName) 
+0

openRawResource를 사용하여 InputStream에 대해 FileInputStream을 변경하면 아직 작동하지 않습니다. – Genaut

+0

logcat을 추가하십시오! – bernlim

+0

와우, FileInputStream 대신 inputStream으로 다시 시도해 보았습니다! 고마워요 !! :) 당신은 나를 행복하게합니다! – Genaut

관련 문제