2013-03-27 11 views
23

Ich habe eine Videodatei in meinem externen Verzeichnis. Wie kann ich es auf Inputstream Variable laden. Vorläufig lese ich Datei im Res/Raw-Ordner, aber ich möchte es von der SD-Karte lesen. Ich weiß auch nicht über den Namen der Datei, aber ihr Weg wird durch Absicht erhalten. überprüfen Sie den folgenden CodeLaden Sie eine Datei aus dem externen Speicher nach Inputstream

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

Alle drei Antworten nicht verstehen, was ein URI ist, und dass sie Pfad nicht immer eine Datei sind. Wenn du den Dateipfad hättest, hättest du es selbst herausgefunden, aber die geposteten Antworten beantworten einfach nicht die eigentliche Frage. – BooleanCheese

Antwort

54

Versuchen

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

Dann können Sie aus dem Stream lesen.

+0

gut dank seiner Arbeit. aber ich kann hier nichts, es gibt zu viel Lärm. Irgendeine Idee warum ist es so? –

+6

Hinweis: Diese Antwort funktioniert nur für die Frage von OP (OP haben eine uri, die ein Dateipfad ist). Im allgemeinen Fall gibt Uri.toString() nicht notwendigerweise einen Dateipfad zurück (uri könnte stattdessen ein Inhaltspfad oder eine URL sein usw.). Diese Methode funktioniert nur für Uri, das ist ein Dateipfad. Überprüfen Sie die Antwort auf diese Frage: http://stackoverflow.com/questions/5657411/android-getting-a-file-uri-from-a-content-uri –

+1

Gut ist die Frage mit dem Titel "Laden Sie eine Datei aus dem externen Speicher". Ich denke, vorausgesetzt, das eingehende URI ist eine Datei ist in diesem Fall sicher. –

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); 
Verwandte Themen