아주 간단한 코드로 비디오를 재생하려고하는데, 내가 무엇을 바꿔도 항상 같은 문제가 발생합니다. onCreate의 마지막 줄 onResume이 호출되었지만 surfaceCreated를 호출하기 전에는 아무 것도 호출되지 않고 Activity가 잡히지 않은 예외로 종료됩니다. 내가 뭘 잘못하고 있니?SurfaceView가 생성되기 전에 잡히지 않은 예외 - Android - 비디오 재생
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class VideoPlayerActivity extends Activity implements SurfaceHolder.Callback {
private MediaPlayer mMediaPlayer;
private SurfaceView vview;
private SurfaceHolder holder;
private String videoPath;
private String id;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.videoplayer);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
System.out.println("Inside VideoPlayerActivity.");
vview = (SurfaceView) findViewById(R.id.vplay_surface);
holder = vview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
System.out.println("Surface and holder configured.");
//Bundle dungle = getIntent().getExtras();
//id = dungle.getString("id");
id = "1";
videoPath = getFilesDir().getAbsolutePath().toString() + File.separator + "VID" + id + ".mp4";
System.out.println("PATH: " + videoPath);
//iniElements();
}
@Override
public void onResume() {
iniElements();
}
private void iniElements() {
mMediaPlayer = new MediaPlayer();
System.out.println("MediaPlayer object created.");
}
private void iniPlayer() {
System.out.println("Initiating player!");
try {
mMediaPlayer.setDataSource(videoPath);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.start();
System.out.println("Reached START PLAYER.");
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
System.out.println("Surface changed.");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
System.out.println("Surface created!");
try {
mMediaPlayer.setDisplay(holder);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Elements configured.");
iniPlayer();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
System.out.println("Surface destroyed.");
}
@Override
public void onPause() {
System.out.println("Activity on pause.");
}
@Override
public void onDestroy() {
System.out.println("Destroying activity.");
}
}
그리고 XML 파일로 간단 : 사전에
05-06 16:39:51.286: INFO/power(2083): *** acquire_dvfs_lock : lockType : 1 freq : 1200000
05-06 16:39:51.286: INFO/ActivityManager(2083): START {intent.toShortString} from pid 18751
05-06 16:39:51.286: DEBUG/PowerManagerService(2083): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1200000 uid : 1000 pid : 2083 tag : ActivityManager
05-06 16:39:51.286: WARN/ActivityManager(2083): mDVFSLock.acquire()
05-06 16:39:51.306: DEBUG/ActivityManager(2083): Trying to launch applicationName
05-06 16:39:51.326: DEBUG/AndroidRuntime(18751): Shutting down VM
05-06 16:39:51.326: WARN/dalvikvm(18751): threadid=1: thread exiting with uncaught exception (group=0x40c341f8)
05-06 16:39:51.331: WARN/ActivityManager(2083): Force finishing activity r.intent.getComponent().flattenToShortString()
05-06 16:39:51.336: VERBOSE/yamaha::media::VolumeCtrl(1833): VolumeCtrl::createVolume()
05-06 16:39:51.336: DEBUG/yamaha::media::VolumeCtrl(1833): Dir0 : AP Playback Music SP (0001h)
05-06 16:39:51.336: DEBUG/yamaha::media::VolumeCtrl(1833): Dir0Att : AP Playback Music SP (0001h)
05-06 16:39:51.336: DEBUG/yamaha::media::VolumeCtrl(1833): DacMaster : AP Playback Music SP (0001h)
05-06 16:39:51.336: DEBUG/yamaha::media::VolumeCtrl(1833): Sp : AP Playback Music SP (FD81h)
05-06 16:39:51.336: VERBOSE/yamaha::media::VolumeCtrl(1833): VolumeCtrl::setVolume()
05-06 16:39:51.336: DEBUG/yamaha::media::VolumeCtrl(1833): VolumeCtrl::setVolume() FM Playback: Ready
05-06 16:39:51.336: DEBUG/yamaha::media::VolumeCtrl(1833): VolumeCtrl::setVolume() VoiceCall: Ready
05-06 16:39:51.336: WARN/ActivityManager(2083): Force finishing activity r.intent.getComponent().flattenToShortString()
05-06 16:39:51.351: INFO/dumpstate(18883): Check if stand-alone
05-06 16:39:51.356: INFO/dumpstate(18883): begin
05-06 16:39:51.401: INFO/ALSAModule(1833): Initialized ALSA PLAYBACK device hifi
05-06 16:39:51.641: INFO/AudioPolicyManager(1833): stopOutput() output 1, stream 1, session 2190
05-06 16:39:51.681: INFO/AudioFlinger(1833): stop output streamType (0, 1) for 1
05-06 16:39:51.836: WARN/ActivityManager(2083): Activity pause timeout for r
감사 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="268dp"
android:layout_height="202dp"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:orientation="horizontal" >
<SurfaceView
android:id="@+id/vplay_surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerInside"
android:gravity="center" />
</RelativeLayout>
</LinearLayout>
로그 캣 말한다!
당신이 logcat의 정확한 부분을 게시했다고 생각하지 않습니다 ... 예외는 없습니다 ... –
거기에 잡힐 수없는 예외가 있습니다 !! 나는 그것이 어디에서 일어나는 지 모르기 때문에 그것을 어디에서 붙잡을 지 모른다! onCreate() 확인 완료 (on System.out 참조), onResume() 완료, 그리고 응용 프로그램이 catch되지 않은 예외로 끝나고, 그것은 surfaceCreated() 또는 onDestroy() 또는 아무것도 입력하지 않는, 그냥 충돌합니다. 잡히지 않는 예외 (05-06 16 : 39 : 51.326) !! Help :( – Azurlake