VideoView を使用してインターネットから http/rtsp ビデオを再生する単純なアプリをテストしています。アプリは 2.2 バージョンから 3.3 までは正常に動作しますが、4.0 以降でテストするとクラッシュします!!! (エミュレーターと実際のモバイルの両方でテスト済み:-/)
誰でも理由を教えてもらえますか?
xml ファイル:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText android:id="@+id/path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<VideoView android:id="@+id/surface_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</VideoView>
<LinearLayout
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
>
<ImageButton android:id="@+id/play"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/play"/>
</LinearLayout>
</LinearLayout>
Java ファイル:
public class Video extends Activity {
private static final String TAG = "VideoViewDemo";
private VideoView mVideoView;
private EditText mPath;
private ImageButton mPlay;
private Uri current;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.video);
mVideoView = (VideoView) findViewById(R.id.surface_view);
mPath = (EditText) findViewById(R.id.path);
mPath.setText("http://daily3gp.com/vids/747.3gp");
playVideo();
mPlay = (ImageButton) findViewById(R.id.play);
mPlay.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
playVideo();
}
});
runOnUiThread(new Runnable(){
public void run() {
playVideo();
}
});
}
private void playVideo() {
try {
//final String path = mPath.getText().toString();
Uri path = Uri.parse(mPath.getText().toString());
Log.v(TAG, "path: " + path);
if (path == null) {
Toast.makeText(Video.this, "File URL/path is empty",
Toast.LENGTH_LONG).show();
} else {
// If the path has not changed, just start the media player
if (path.equals(current) && mVideoView != null) {
mVideoView.start();
mVideoView.requestFocus();
return;
}
current = path;
mVideoView.setVideoURI(path);
mVideoView.start();
mVideoView.requestFocus();
}
} catch (Exception e) {
Log.e(TAG, "error: " + e.getMessage(), e);
if (mVideoView != null) {
mVideoView.stopPlayback();
}
}
}
}
エラーを含む Logcat ファイルは次のとおりです。
11-09 17:25:32.582: E/WindowManager(538): Activity com.testing.interacciones.Video has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@413fb820 that was originally added here
11-09 17:25:32.582: E/WindowManager(538): android.view.WindowLeaked: Activity com.testing.interacciones.Video has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@413fb820 that was originally added here
11-09 17:25:32.582: E/WindowManager(538): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:343)
11-09 17:25:32.582: E/WindowManager(538): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:245)
11-09 17:25:32.582: E/WindowManager(538): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
11-09 17:25:32.582: E/WindowManager(538): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
11-09 17:25:32.582: E/WindowManager(538): at android.view.Window$LocalWindowManager.addView(Window.java:537)
11-09 17:25:32.582: E/WindowManager(538): at android.app.Dialog.show(Dialog.java:274)
11-09 17:25:32.582: E/WindowManager(538): at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
11-09 17:25:32.582: E/WindowManager(538): at android.widget.VideoView$4.onError(VideoView.java:382)
11-09 17:25:32.582: E/WindowManager(538): at android.widget.VideoView.openVideo(VideoView.java:240)
11-09 17:25:32.582: E/WindowManager(538): at android.widget.VideoView.access$2000(VideoView.java:49)
11-09 17:25:32.582: E/WindowManager(538): at android.widget.VideoView$6.surfaceCreated(VideoView.java:465)
11-09 17:25:32.582: E/WindowManager(538): at android.view.SurfaceView.updateWindow(SurfaceView.java:562)
11-09 17:25:32.582: E/WindowManager(538): at android.view.SurfaceView.access$000(SurfaceView.java:82)
11-09 17:25:32.582: E/WindowManager(538): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:171)
11-09 17:25:32.582: E/WindowManager(538): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590)
11-09 17:25:32.582: E/WindowManager(538): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1596)
11-09 17:25:32.582: E/WindowManager(538): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
11-09 17:25:32.582: E/WindowManager(538): at android.os.Handler.dispatchMessage(Handler.java:99)
11-09 17:25:32.582: E/WindowManager(538): at android.os.Looper.loop(Looper.java:137)
11-09 17:25:32.582: E/WindowManager(538): at android.app.ActivityThread.main(ActivityThread.java:4340)
11-09 17:25:32.582: E/WindowManager(538): at java.lang.reflect.Method.invokeNative(Native Method)
11-09 17:25:32.582: E/WindowManager(538): at java.lang.reflect.Method.invoke(Method.java:511)
11-09 17:25:32.582: E/WindowManager(538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-09 17:25:32.582: E/WindowManager(538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-09 17:25:32.582: E/WindowManager(538): at dalvik.system.NativeStart.main(Native Method)
11-09 17:25:38.494: D/ExchangeService(421): Received deviceId from Email app: androidc259148960
11-09 17:25:38.494: D/ExchangeService(421): Reconciling accounts...
11-09 17:25:40.621: W/ThrottleService(93): unable to find stats for iface rmnet0
11-09 17:28:46.553: D/dalvikvm(177): GC_CONCURRENT freed 458K, 6% free 10347K/10951K, paused 7ms+8ms
11-09 17:28:48.562: I/dalvikvm(93): Jit: resizing JitTable from 4096 to 8192
11-09 17:30:29.982: I/Process(538): Sending signal. PID: 538 SIG: 9
11-09 17:30:30.122: I/ActivityManager(93): Process com.testing.interacciones (pid 538) has died.
11-09 17:30:30.132: W/InputDispatcher(93): channel '41650408 com.testing.interacciones/com.testing.interacciones.Splash (server)' ~ Consumer closed input channel or an error occurred. events=0x8
11-09 17:30:30.132: E/InputDispatcher(93): channel '41650408 com.testing.interacciones/com.testing.interacciones.Splash (server)' ~ Channel is unrecoverably broken and will be disposed!
私のマニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testing.interacciones"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Splash" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Video"
android:label="@string/app_name" >
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
モバイルのクラッシュ エラーには、「残念ながら、VideoView のテストが停止しました」と表示されます。
事前にthx!