2011-05-12 3 views
8

내 전화를 돌릴 때 이봐, 내 활동이 다시 시작됩니다. 동영상을 재생하는 동영상보기가 있고 회전하고 동영상이 다시 시작됩니다. 지금 나는 내 활동이 추가 발견 된 매니페스트 고정이회전 전화가 안드로이드에서 비디오를 다시 시작합니다

<activity android:name="Vforum" android:configChanges="orientation"></activity> 

문제는 지금은 사라지고 다시 올 때까지 비디오 컨트롤하여 가로에서 세로로가는 정말 긴 컨트롤 중 하나를 떠나, 다시 그려 존재하지 않는 것입니다 모드 또는 세로에서 가로로가는 정말 짧은 컨트롤. 일단 그들이 사라지고 난 다음에 다시 돌아 오도록 탭하면 올바르게 크기가 정해집니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

21

는 AndroidManifest.xml에 당신의 활동에

android:configChanges="orientation"

를 추가합니다.

  • here을 설명

는 대상 API 레벨 13 이상, 당신은 orientation 값 이외에 screenSize 값을 포함해야합니다 .. 내 문제가 다시 프로그레시브 비디오를 다운로드하지 않습니다 해결했다. 따라서 태그는 다음과 같이 보일 수 있습니다.

android:configChanges="orientation|screenSize" 
3

활동주기 이벤트에서 비디오 파일 위치를 기억해보십시오. 활동이 생성되면 비디오 위치를 가져 와서 다시 시작한 순간부터 재생할 수 있습니다. 액티비티 클래스에서

:

@Override 
protected void onCreate(Bundle bundle){ 
    super.onCreate(bundle); 
    int mPos=bundle.getInt("pos"); // get position, also check if value exists, refer to documentation for more info 
} 

@Override 
protected void onSaveInstanceState (Bundle outState){ 
    outState.putInt("pos", myVideoView.getCurrentPosition()); // save it here 
} 
+0

에서 은 무엇 라이프 사이클 이벤트라고? 나는 빨리 googled하고 부족했다. myVideoView.getCurrentPosition()이 현재 시간을 저장하는 것을 볼 수 있지만, 회전 중이고 리셋 중이면 점진적 다운로드가 시작된다는 것을 알 수 있습니다. 간단한 예제를 제공해 주시겠습니까? Sudo 코드는 나를 위해 일할 것입니다, 감사합니다! – Ronnie

+0

전화를 돌리면 현재 Activity 인스턴스가 삭제되고 새 인스턴스가 만들어 지므로 onCreate()에서 비디오 위치에 대한 번들 객체를 확인할 수 있습니다. 비디오 위치는 onSaveInstanceState (Bundle)에 저장 될 수 있습니다. http://developer.android.com/reference/android/app/Activity.html –

+0

을 참조하십시오. 내가 보는 것은 비디오가 앞으로 언젠가 시작된다는 것입니다. 아마 그 다음 프레임, 약 1 초. 그러나 정보는 손실됩니다. 누구든지 비디오를 잃지 않고 회전하는 방법을 알고 있습니까? – Lucy

1

가 매니페스트에 configChanges 속성을 추가하면 handle config changes yourself을 의미합니다. 활동에 메서드를 재정의 :

int lastOrientation = 0; 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks if orientation changed 
    if (lastOrientation != newConfig.orientation) { 
     lastOrientation = newConfig.orientation; 
     // redraw your controls here 
    } 
} 
+0

Ohhh ok gotcha! 나는 내 두 번째 주 자바의 그래서 벌거 벗은 나와 .... 어떻게 컨트롤을 지금 다시 그리기합니까? 'mVideoView.refreshDrawableState();'를 시도해 보았습니다. 나는 그들을 다시 그리는 방법을 모른다. – Ronnie

+0

동영상 플레이어를 죽이기 때문에 전체보기를 다시 만들고 싶지 않습니다. 변경 (컨트롤)하고 플레이어를 그대로 남겨 둘 필요가있는 부분 만 교체해야합니다.기본적으로 부모 뷰 그룹 (레이아웃)을 찾고, 대체 할 뷰의 위치를 ​​가져오고 (인덱스), 제거하고, 새 뷰를 확장하고, 같은 위치에 추가합니다. http://stackoverflow.com/questions/3334048/android- 레이아웃 교체 -a-view-with-another-view-on-run-time –

+0

나는 표준 MediaController를 사용하고있다. 나는 레이아웃을 바꾸고 싶지 않습니다. 다시 그려야 할 비디오 컨트롤이 내장되어 있습니다. 무슨 일이 일어나고 있는지 비디오를 올렸습니다. http://www.youtube.com/watch?v=FgRythmUo3A – Ronnie

0

ConfigChanges가 올바르지 만 작동합니다. 회전 할 때

<activity 
     android:configChanges="orientation|screenSize" ... > 

또한 활동 클래스

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (lastOrientation != newConfig.orientation) { 
     lastOrientation = newConfig.orientation; 
     // redraw your controls here 
    } 
} 
관련 문제