【发布时间】:2015-12-28 09:45:56
【问题描述】:
大家好,今天我在我的 Android 应用程序代码中遇到了意外崩溃,它适用于除 Micromax A250 之外的所有设备。我用来从原始文件夹播放视频的代码如下所示:
if (mediaControls == null) {
mediaControls = new MediaController(AndroidVideoViewExample.this);
}
myVideoView = (VideoView) findViewById(R.id.video_view);
try {
myVideoView.setMediaController(mediaControls);
Uri uri=Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.samplevideo);
Log.d("URI", uri.toString());
myVideoView.setVideoURI(uri);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
myVideoView.requestFocus();
myVideoView.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
myVideoView.start();
}
});
logcat 跟踪是:
12-28 15:08:30.547:E/AndroidRuntime(21939):致命异常:主要 12-28 15:08:30.547: E/AndroidRuntime(21939): java.lang.StringIndexOutOfBoundsException:长度=11;区域开始=0; regionLength=-1 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 java.lang.String.startEndAndLength(String.java:583) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 java.lang.String.substring(String.java:1464) 12-28 15:08:30.547: E/AndroidRuntime(21939):在 android.widget.VideoView.openVideo(VideoView.java:407) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.widget.VideoView$6.surfaceCreated(VideoView.java:727) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.SurfaceView.updateWindow(SurfaceView.java:606) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.SurfaceView.access$000(SurfaceView.java:88) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.SurfaceView$3.onPreDraw(SurfaceView.java:183) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:692) 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2123) 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879) 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 android.view.Choreographer.doCallbacks(Choreographer.java:579) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.Choreographer.doFrame(Choreographer.java:548) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 android.os.Handler.handleCallback(Handler.java:725) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.os.Handler.dispatchMessage(Handler.java:92) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 android.os.Looper.loop(Looper.java:153) 12-28 15:08:30.547: E/AndroidRuntime(21939):在 android.app.ActivityThread.main(ActivityThread.java:5297) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 java.lang.reflect.Method.invokeNative(Native Method) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 java.lang.reflect.Method.invoke(Method.java:511) 12-28 15:08:30.547: E/AndroidRuntime(21939):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 12-28 15:08:30.547: E/AndroidRuntime(21939): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 12-28 15:08:30.547:E/AndroidRuntime(21939):在 dalvik.system.NativeStart.main(Native Method)
URI 的日志跟踪是:
URI android.resource://com.samplePlayVideo/2130968576
我不知道为什么会这样...感谢您的帮助!提前致谢。
【问题讨论】:
-
尝试打印你的网址:Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.samplevideo)
-
@S-MILE-S 在调试时获取 uri 但出现错误
-
所有 Micromax 手机都面临这个问题,这是供应商特定的冲突。这包括 Micromax A117 等。一种可能的 hacky 解决方案是将 Micromax 检测为制造商,如果是这样,则不要使用 VideoView,而是为您的视频使用 TextureView。这可能会阻止崩溃。尽管就个人而言,我认为最好的做法是将该设备添加到您的禁令列表中。相对于所有其他 Android 用户,我怀疑有太多用户实际使用该设备。
标签: android android-mediaplayer android-videoview