4

当我的 Android 应用程序启动时,我尝试为启动 Activity 播放视频,但我遇到的问题是永远不会调用 onSurfaceTextureAvailable 接口方法。

这是代码:

public class HomeActivity extends Activity implements TextureView.SurfaceTextureListener,
        MediaPlayer.OnBufferingUpdateListener, OnCompletionListener,
        MediaPlayer.OnPreparedListener, MediaPlayer.OnVideoSizeChangedListener {

    private MediaPlayer videoMediaPlayer;
    private TextureView videoPreview;
    private Bundle extras;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        videoPreview = new TextureView(this);
        videoPreview.setSurfaceTextureListener(this);
        extras = getIntent().getExtras();
        setContentView(videoPreview);
    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        Surface s = new Surface(surface);
        Log.d("HOME", "onSurfaceTextureAvailable");
        try {
            videoMediaPlayer= new MediaPlayer();
            Uri video = Uri.parse("android.resource://" + getPackageName() + "/"
                    + R.raw.intro_video);
            videoMediaPlayer.setDataSource(getApplicationContext(), video);
            videoMediaPlayer.setSurface(s);
            videoMediaPlayer.prepare();
            videoMediaPlayer.setOnBufferingUpdateListener(this);
            videoMediaPlayer.setOnCompletionListener(this);
            videoMediaPlayer.setOnPreparedListener(this);
            videoMediaPlayer.setOnVideoSizeChangedListener(this);
            videoMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            videoMediaPlayer.start();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

// Other stuff

该代码来自stackoverflow类似的问题,似乎他让它像这样工作。

有什么建议吗?

4

1 回答 1

6

要调用 onSurfaceTextureAvailable(),必须启用硬件加速。您可以在 AndroidManifast.xml 文件中执行此操作

<activity
    android:name="com.example.HomeActivity"
    android:hardwareAccelerated="true" >
</activity>
于 2015-04-21T08:49:59.783 回答