2012-05-06 2 views
1

아주 간단한 코드로 비디오를 재생하려고하는데, 내가 무엇을 바꿔도 항상 같은 문제가 발생합니다. 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> 

로그 캣 말한다!

+0

당신이 logcat의 정확한 부분을 게시했다고 생각하지 않습니다 ... 예외는 없습니다 ... –

+0

거기에 잡힐 수없는 예외가 있습니다 !! 나는 그것이 어디에서 일어나는 지 모르기 때문에 그것을 어디에서 붙잡을 지 모른다! onCreate() 확인 완료 (on System.out 참조), onResume() 완료, 그리고 응용 프로그램이 catch되지 않은 예외로 끝나고, 그것은 surfaceCreated() 또는 onDestroy() 또는 아무것도 입력하지 않는, 그냥 충돌합니다. 잡히지 않는 예외 (05-06 16 : 39 : 51.326) !! Help :( – Azurlake

답변

2

확인 문제가 발견되었습니다. 문제는 이러한 방식으로/data/data/package 내부에서 파일을 열 수 없다는 것입니다. 먼저 openFileInput()을 사용하여 FileInputStream을 만든 다음 FileInputStream을 참조하여 File을 만들어야합니다. 그 파일을 사용하여 File Descriptor를 가져 와서 플레이어에게 전달할 수 있습니다. 코드를 보려면 코드를 요청하십시오. 공유하겠습니다. 건배

관련 문제