2011-07-11 20 views
5

MediaViewer'ı bir VideoView ile kullanırken ekranda tutmanın bir yolunu bulmakta zorluk çekiyorum. Uygulamamda res/raw konumunda bulunan bir Ses dosyasını oynatmak istiyorum. Dosya çalıyor fakat kontrolörün ekranda kullanıcının uzunluğunu ve ne kadar süre kaldığını görmek için ekran üzerinde tutmak istiyorum. Metodu kullanmam için çok fazla zaman bulduk. Bunu yapmak için (zaman), ama nasıl çalışacağımı anlayamıyorum. Çizgiyi mVideoView.getHolder() eklediğinizde MediaController'ı ekranda bir VideoView'da tutmak

package com.sample.VideoViewExample; 
import android.app.Activity; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.widget.MediaController; 
import android.widget.VideoView; 

public class VideoViewExample extends Activity implements SurfaceHolder.Callback{ 
    private VideoView mVideoView; 
    private MediaController mMedia; 

    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    mVideoView = (VideoView) findViewById(R.id.surface_view); 
    //mVideoView.getHolder().addCallback(this); 
    //mMedia.show(50000); 
    //mVideoView.setMediaController(mMedia); 

    MediaController mMedia = new MediaController(this); 
    mMedia.setMediaPlayer(mVideoView); 
    mMedia.setAnchorView(mVideoView); 
    mVideoView.setMediaController(mMedia); 

    mVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() +"/"+R.raw.osa_patient)); 

    mVideoView.requestFocus(); 
    mVideoView.start(); 

    } 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    mMedia.show(500000); 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

} 
} 

addCallback (this);: Burada

kullanıyorum kodudur. uygulama hatası, neden emin değilim.

ben yapmak istiyorum ne Herhangi bir yardım veya alternatif karşılama :)

teşekkür daha fazladır, JB

+0

VideoView'ın ses dosyalarını da yürüteceğini mi söylüyorsunuz? –

cevap

4

Tamam ben bulduk! Üzerinde saat geçirdikten sonra! Bu yüzden bilgime göre farklı forumlarda nasıl yapılacağına dair bir ipucu yok.

BİRİNCİ SINIF (örnek ...)

package com.sample.VideoViewExample; 
import android.app.Activity; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.VideoView; 

public class VideoViewExample extends Activity implements SurfaceHolder.Callback{ 
    private VideoView mVideoView; 


    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    mVideoView = (VideoView) findViewById(R.id.surface_view);  
    mVideoView.setKeepScreenOn(true); 

     Window window = getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    SurfaceHolder holder = mVideoView.getHolder(); 
    holder.addCallback(this);  
    MediaController_2 mMedia = new MediaController_2(this); 

    mMedia.setMediaPlayer(mVideoView); 
    mMedia.setAnchorView(mVideoView);  
    mVideoView.setMediaController(mMedia); 
    mVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() +"/"+R.raw.osa_patient));  
    mVideoView.requestFocus(); 
    mVideoView.start(); 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

} 
} 

İKİNCİ SINIF (hile ile)

package com.sample.VideoViewExample; 

import android.content.Context; 
import android.widget.MediaController; 

public class MediaController_2 extends MediaController{ 


    public MediaController_2(Context context) { 
     super(context); 

     // TODO Auto-generated constructor stub 
    } 

    public void hide() { 
    } 

} 

hile sadece yeni oluşturmaktır: Burada buldum bir hile Mediacontroller'ı genişleten ve hangi işlevi gizle() işlevi MediaController yok! Eğer daha iyi anlamak için MediaController kaynak koduna bakmak istiyorsanız

, buradan bakabilirsiniz: Bu sb yardımı olacak MediaController http://hi-android.info/src/android/widget/MediaController.java.html

Umut için // kaynak kodu, JB

+3

Medya Denetleyicisini ve geçersiz kılma yöntemini genişletme Tüm Ekranı devre dışı bırakın ve ortam denetleyicisi denetimleri dışındaki bir Etkinliğin herhangi bir dokunma olayını algılayamıyor. – SALMAN

+0

@SALMAN evet bu doğru ama bunun için herhangi bir iş var mı? –

12

bu benim için çalıştı. Sadece medya denetleyici sınıfını genişletin. Ve gizleme yöntemini geçersiz kıl.

MediaController mediaController = new MyMediaController(this, true); 

public class MyMediaController extends MediaController { 

    public MyMediaController(Context context, boolean useFastForward) { 
     super(context, useFastForward); 
    } 

    @Override 
    public void hide() { 
     mediaController.show(0); 
    } 

} 
+0

fakat uygulamada geri gitmeyi engelliyor. –

0

Şimdiye kadar verilen yanıtlardan, şimdi sorun şu ki, geri işlevselliği bu kodu takip edip düzeltmek için çalışmayacaktır. Tek yapmanız gereken tek şey onTouchEvent geçersiz sonra kendi sınıfı ile MediaController geçersiz kılmak ve olduğu

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 

    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 

     super.hide(); 
     Activity activity = (Activity)getContext(); 
     activity.finish(); 

    } 
    return super.dispatchKeyEvent(event); 
}} 
0

çalışma geri işlevselliği yapmak için gerekli

public class CustomMediaController extends MediaController { 


public CustomMediaController(Context context) { 
    super(context); 

    // TODO Auto-generated constructor stub 
} 


public void hide() { 

} 

//.

public class SmartLinkVideoController extends MediaController implements MediaPlayerControl { 

//declare needed variables 
private SmartLinkVideoPlayer mVideoPlayer; 

public SmartLinkVideoController(Context context) { 
    super(context); 
} 

public SmartLinkVideoController(Context context, SmartLinkVideoPlayer videoPlayer) { 
    this(context); 
    this.setMediaPlayer(this); 
    this.mVideoPlayer = videoPlayer; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    //super implementation sets default time to hide of ~ 3 seconds 
    show(0); 
    return true; 
} 

@Override 
public void start() { 
    mVideoPlayer.start(); 
} 

@Override 
public void pause() { 
    mVideoPlayer.pause(); 
} 

@Override 
public int getDuration() { 
    return mVideoPlayer.getDuration(); 
} 

@Override 
public int getCurrentPosition() { 
    return mVideoPlayer.getCurrentPosition(); 
} 

@Override 
public void seekTo(int pos) { 
    mVideoPlayer.seekTo(pos); 
} 

@Override 
public boolean isPlaying() { 
    return mVideoPlayer.isPlaying(); 
} 

@Override 
public int getBufferPercentage() { 
    return mVideoPlayer.getPercentBuffered(); 
} 

@Override 
public boolean canPause() { 
    return true; 
} 

@Override 
public boolean canSeekBackward() { 
    return true; 
} 

@Override 
public boolean canSeekForward() { 
    return true; 
} 

@Override 
public int getAudioSessionId() { 
    return 0; 
} 

public boolean hasVideoPlayer() { 
    return (mVideoPlayer != null); 
} 

public void prepareVideo() { 
    if(mVideoPlayer.getVideoType() == SmartLinkVideoPlayer.VIDEO_TYPE_INTERNAL 
      || mVideoPlayer.getVideoType() == SmartLinkVideoPlayer.VIDEO_TYPE_EXPANSION) 
     mVideoPlayer.prepare(); 
    else 
     mVideoPlayer.prepareAsync(); 
} 

public void prepareSurface(SurfaceHolder holder) { 
    mVideoPlayer.setDisplay(holder); 
} 

public void rewindVideo() { 
    mVideoPlayer.seekTo(0); 
} 

public void setVideoPlayer(SmartLinkVideoPlayer videoPlayer) { 
    mVideoPlayer = videoPlayer; 
} 

public void stopVideoPlayer() { 
    mVideoPlayer.stop(); 
} 

public void resetVideoPlayer() { 
    mVideoPlayer.reset(); 
} 

public void releaseVideoPlayer() { 
    mVideoPlayer.release(); 
    mVideoPlayer = null; 
} 
}