2011-05-10 92 views
0

嗨我試圖讓我的Android應用程序的res/raw文件夾中的文件複製到手機的SD卡上,以便它們可以設置爲鈴聲。以下是我迄今爲止在我的應用程序:從res文件到sdcard在android上的文件

package com.wochstudios.ringtonetest; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import android.app.*; 
import android.content.ContentResolver; 
import android.content.ContentValues; 
import android.content.res.*; 
import android.app.Activity; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class setRingtone extends Activity { 
Button setBtn; 
TextView result; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    setBtn = (Button) findViewById(R.id.button1); 
    result = (TextView) findViewById(R.id.textView1); 

    setBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //Attempt to make file out on raw element 
      setRing(); 
     } 
    }); 
} 
public void setRing(){ 
    File newSoundFile = new File("/sdcard/media/ringtone", "fortkickass.mp3"); 
    Uri mUri =   Uri.parse("android.resource://com.wochstudios.ringtonetest/R.raw.fortkickass"); 

    ContentResolver mCr = getContentResolver(); 

    AssetFileDescriptor soundFile; 

    try { 
      soundFile= mCr.openAssetFileDescriptor(mUri, "r"); 
     } catch (FileNotFoundException e) { 
      soundFile=null; 
     } 


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





} 

}

這個崩潰,一旦它擊中setRing方法的第二個嘗試捕捉,我接到了一個問題,這個代碼早些時候公佈,但我可以」找不到鏈接了任何幫助將是巨大的

編輯

我騙了四周,發現Assetfiledescriptor音效檔爲空,這樣什麼所以現在導致崩潰,我需要弄清楚它爲什麼是空的。

回答

3

說明:

第一個try/catch塊的作用:

soundFile=null; 

如果讀取失敗。

然後,在第二,你音效檔中使用:

FileInputStream fis = soundFile.createInputStream(); 

您正在閱讀null,因爲第一次嘗試失敗

編輯:

用這個代替

InputStream ins = context.getResources().openRawResource (R.raw.FILENAME) 
byte[] buffer = new byte[ins.available()]; 
ins.read(buffer); 
ins.close(); 
String filename = Environment.getExternalStorageDirectory().toString()+File.separator+FILENAME; 
FileOutputStream fos = new FileOutputStream(filename); 
fos.write(buffer); 
fos.close(); 
+0

我得到IOException異常@ALeadam 「\t嘗試{ \t \t InputStream的插件= this.getResources()openRawResource(R.raw.fortkickass)。 \t \t byte [] buffer = new byte [ins.available()]; \t \t ins.read(buffer); \t \t ins.close(); \t \t String filename = Environment.getExternalStorageDirectory()。toString()+ File.separator +「fortkickass.mp3」; \t \t result.setText(filename); \t \t FileOutputStream fos = new FileOutputStream(filename); \t \t fos.write(buffer); \t \t fos.close(); \t \t \t}趕上(IOException的IO){ \t \t result.setText( 「不」); \t}' – DMcP89 2011-05-10 01:46:00

+0

@BeardFace你在哪裏得到異常? – Aleadam 2011-05-10 01:46:52

+0

我不完全確定我認爲它與FileOutputStream,因爲當我評論說,我不明白它@ALeaadam – DMcP89 2011-05-10 01:57:33

1

您是否忘記設置在Manifest文件中寫入的權限?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
相關問題