2013-03-27 21 views
23

Harici dizimde bir video dosyası var. Bunu inputstream değişkenine nasıl yükleyebilirim. Res/raw klasöründe dosya okuyor olduğum için ama sdcard'dan okumak istiyorum. Ayrıca dosyanın adı hakkında bilmiyorum ama onun yolu yoluyla niyetini alınacaktır. Sonra akışından okuyabilirHarici bir dosyadan Inputstream'e bir dosya yükleyin.

File file = new File(Uri.toString()); 
FileInputStream fileInputStream = new FileInputStream(file); 

deneyin Aşağıdaki kodu

public class SonicTest extends Activity 
{ 
VideoView videoView; 
String uri; 
InputStream soundFile; 
File file; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState);      
    setContentView(R.layout.main); 

} 

public void play(View view) 
{ 
    new Thread(new Runnable() 
    { 
     public void run() 
     { 
      float speed= (float) 1.0; 
      float pitch= (float) 1.5; 
      float rate= (float) 1.0; 
      uri= Environment.getExternalStorageDirectory().toString(); 
      uri=uri+"/video.3gp"; 
      AndroidAudioDevice device = new AndroidAudioDevice(22050, 1); 
      Sonic sonic = new Sonic(22050, 1); 
      byte samples[] = new byte[4096]; 
      byte modifiedSamples[] = new byte[2048]; 
      InputStream soundFile = null; 

    //soundFile = getContentResolver().openInputStream(Uri.parse(uri)); 
    soundFile=getResources().openRawResource(R.raw.video3); 
    Log.i("testing","check if SoundFile is correct "+soundFile); 

      int bytesRead; 

      if(soundFile != null) { 
       sonic.setSpeed(speed); 
       sonic.setPitch(pitch); 
       sonic.setRate(rate); 
       do { 
        try { 
         bytesRead = soundFile.read(samples, 0, samples.length); 
        } catch (IOException e) { 
         e.printStackTrace(); 
         return; 
        } 
        if(bytesRead > 0) { 
         sonic.putBytes(samples, bytesRead); 
        } else { 
         sonic.flush(); 
        } 
        int available = sonic.availableBytes(); 
        if(available > 0) { 
         if(modifiedSamples.length < available) { 
          modifiedSamples = new byte[available*2]; 
         } 
         sonic.receiveBytes(modifiedSamples, available); 
         device.writeSamples(modifiedSamples, available); 
        } 
       } while(bytesRead > 0); 
       device.flush(); 
      } 
     } 
    }).start(); 
}} 
+0

Her üç cevaplar URI ne olduğunu anlamak için başarısız ve her zaman bir dosya yolu olmadığını. Dosya yoluna sahip olsaydınız, bunu kendiniz çözdünüz, ancak yayınlanan cevaplar asıl soruya cevap vermiyor. – BooleanCheese

cevap

54

kontrol edin.

+0

iyi çalışıyor. ama burada hiçbir şey yapamıyorum çok fazla gürültü var. Herhangi bir fikri neden böyle? –

+6

Not: Bu cevap sadece OP'nin sorusu için çalışır (OP'nin bir dosya yolu olan bir uri'si vardır). Daha genel bir durumda, Uri.toString() bir dosya yolunu zorunlu olarak döndürmez (uri bunun yerine bir içerik yolu veya URL olabilir). Bu yöntem, yalnızca bir dosya yolu olan Uri için çalışır. Bu sorunun cevabını kontrol edin: http://stackoverflow.com/questions/5657411/android-getting-a-file-uri-from-a-content-uri –

+1

İyi bir soru "Dosyayı harici depolamadan yükle" başlıklı. Gelen uri'nin bir dosya güvenli olduğunu varsayıyorum. –

0
soundFile = openFileInput(uri); 
6
String fileName = "OfflineMap/maps.xml"; 
String path = Environment.getExternalStorageDirectory()+"/"+fileName; 
File file = new File(path); 
FileInputStream fileInputStream = new FileInputStream(file);