2016-10-01 2 views
2

Ich habe den folgenden Code:Erste java.io.FileNotFoundException wenn Videoview mit

VideoView videoView = (VideoView)findViewById(R.id.instructionsvideo); 
    assert videoView != null; 
    videoView.setVideoPath("android.resource://" + getPackageName() + R.raw.testnatureclip); 
    videoView.start(); 

"testnatureclip" im rohen Ordner befindet:

enter image description here

Aus irgendeinem Grund, nachdem ich bauen das Projekt wird die Datei rot. Hier

ist der Fehler, den ich bekommen: com.roymunson.vroy.copypastakeyboard W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No package found for authority: android.resource://com.roymunson.vroy.copypastakeyboard2131165184

Die mp4 sollte im H.264-Format codiert werden, aber ich weiß nicht, ob die Online-Encoding-Service arbeitete ich verwendet.

Darüber hinaus hat das Videobild nicht die gleichen Dimensionen wie die Datei, wenn das wichtig ist.

Was ist das Problem? Ist der Dateipfad nicht korrekt oder fehlt mir bei der Initialisierung des Videobildes ein Element?

UPDATE ONE:

user8-Lösung verwenden bekam ich folgende Fehlermeldung:

roymunson.vroy.copypastakeyboard W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: /2131165184 
10-01 17:36:20.912 28156-28156/com.roymunson.vroy.copypastakeyboard W/VideoView: Unable to open content: /2131165184 
                       java.io.IOException: setDataSource failed. 
                        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1100) 
                        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1074) 
                        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1028) 
                        at android.widget.VideoView.openVideo(VideoView.java:346) 
                        at android.widget.VideoView.-wrap0(VideoView.java) 
                        at android.widget.VideoView$7.surfaceCreated(VideoView.java:623) 
                        at android.view.SurfaceView.updateWindow(SurfaceView.java:582) 
                        at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:177) 
                        at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) 
                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067) 
                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119) 
                        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060) 
                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                        at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                        at android.view.Choreographer.doFrame(Choreographer.java:606) 
                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                        at android.os.Handler.handleCallback(Handler.java:746) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:148) 
                        at android.app.ActivityThread.main(ActivityThread.java:5443) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

Antwort

1

fand ich 2 Lösungen:

String uriPath = "android.resource://" + getPackageName() + "/raw/testnatureclip"; 
Uri uri = Uri.parse(uriPath); 
videoView.setVideoURI(uri); 

oder

videoView.setVideoURI(Uri.parse("android.resource://ABSOLUTE_PACKAGE_NAME/" + R.raw.testnatureclip)); 
+0

Ich habe meine Antwort zum Zeitpunkt der Veröffentlichung bearbeitet. +1 Ja, benutze einfach die Uri Methode. Und über 'getPackageResourcePath()', versuchen Sie es mit 'String uriPath = getPackageResourcePath() +"/raw/testnatureclip ";' um den Code zu verkürzen. – user8

1

diese eine ausprobieren, einen absoluten Paketnamen Pfad und mit Uri Angabe:

videoView.setVideoURI(Uri.parse("android.resource://com.roymunson.vroy.copypastakeyboard/" 
            + R.raw.testnatureclip)); 

Auch , warum verwenden Sie nicht einfach getPackageResourcePath(), um auf Ressourcen zuzugreifen?

Dann Sie können in der Regel nicht, sie auf diese Weise zugreifen zu können, nur ihre resourceID verwenden sollten, hier ist eine Diskussion über genau dieses Thema: Access resource files in Android.

+0

ich den Beitrag, den Sie verknüpft lesen, aber ich verstehe nicht, wie 'getPackageResourcePath()' direkt zu verwenden. – Roymunson

+0

Auch ich habe versucht Ihre Lösung und es hat nicht funktioniert, ich werde den Stacktrace in einer Bearbeitung auf meinem ursprünglichen Beitrag veröffentlichen. – Roymunson

+0

@Roymunson Ich habe meine Antwort aktualisiert. – user8

Verwandte Themen