Загрузите файл из внешнего хранилища в Inputstream

У меня есть видеофайл в моем внешнем каталоге. Как я могу загрузить его во входную переменную. Пока я читаю файл в папке res / raw, но я хочу прочитать его с SD-карты. Также я не знаю о имени файла, но его путь будет получен через намерение. Проверьте следующий код

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(); }} 

Solutions Collecting From Web of "Загрузите файл из внешнего хранилища в Inputstream"