2013-05-28 16 views
8

raw klasöründe projeye eklediğim bir raw dosyasından Uri dosyasını almaya çalışıyorum. Ama ne olursa olsun, FileNotFoundException alıyorum.Android - Ham dosyadan Uri nasıl edinilir?

Dosya bir .wav dosyasıdır, ayrıca bir .mp4 ile denenmiş, ayrıca çalışmıyor. Her iki dosyayı da MediaPlayer DOES ile çalıyor.

Uri döner: mark.dijkema.android.eindopdracht/2130968576

Benim Kod:

package mark.dijkema.android.eindopdracht; 

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

import android.app.Activity; 
import android.media.AudioFormat; 
import android.media.AudioManager; 
import android.media.AudioTrack; 
import android.net.Uri; 
import android.os.Bundle; 

public class MainActivity extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     PlayWaveFile(); 
    } 

    private void PlayWaveFile() 
    { 
     // define the buffer size for audio track 
     int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); 
     int bufferSize = 512; 
     AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_OUT_MONO, 
      AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); 

     Uri url = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.usa_for_africa_we_are_the_world); 
     File file = new File(url.toString()); 

     int count = 0; 
     byte[] data = new byte[bufferSize]; 

     try { 
      FileInputStream fileInputStream = new FileInputStream(file); 
      DataInputStream dataInputStream = new DataInputStream(fileInputStream); 
      audioTrack.play(); 

      while((count = dataInputStream.read(data, 0, bufferSize)) > -1) 
      { 
       audioTrack.write(data, 0, count); 
      } 

      audioTrack.stop(); 
      audioTrack.release(); 
      dataInputStream.close(); 
      fileInputStream.close(); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

Hata:

java.io.FileNotFoundException: /mark.dijkema.android.eindopdracht/2130968576: open failed: ENOENT (No such file or directory) 

cevap

19

, bu yaklaşım deneyin sizin inputStream olarak getResources().openRawResource(ResourceID) kullanın. Bu boyunca Somewhere :

//FileInputStream fileInputStream = new FileInputStream(file); 
InputStream inputStream = getResources().openRawResource(R.raw.usa_for_africa_we_are_the_world); 
DataInputStream dataInputStream = new DataInputStream(inputStream); 
audioTrack.play(); 

getResources().openRawResource(ResourceID) bir InputStream

EDIT döndürür: Yukarıdaki yaklaşım bu yardımcı olur

Uri url = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.usa_for_africa_we_are_the_world); 
File file = new File(url.toString()); 

Umut, Good Luck kullanırsanız bu kodu kaldırın! ^^

+0

Evet, şimdi çalışıyor. Gerçi sesin düzeltilmesi gerekiyor, içinde çok fazla gürültü var. – DijkeMark

+0

Bunu duyduğuma sevindim, gürültü ve malzeme temizlemede iyi şanslar ^^ – reidzeibel

2

Böyle ham Kaynak için InputStream açabilirsiniz:

InputStream rawInputStream = getResources().openRawResource(R.raw.usa_for_africa_we_are_the_world) 
DataInputStream dataInputStream = new DataInputStream(rawInputStream);