【问题标题】:How to close a VideoView Activity (currently have to press back twice)如何关闭 VideoView Activity(当前必须按回两次)
【发布时间】:2015-08-21 04:11:21
【问题描述】:

我有一个简单的活动来在全屏中预览视频。 Activity的布局是:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/black"
                android:fillViewport="true">

    <VideoView
            android:id="@+id/video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:scaleType="fitCenter"/>

    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/button_height"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:layout_alignParentBottom="true"
        <Button android:id="@+id/buttonClose"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:background="@null"
                android:textSize="18sp"
                android:textColor="@color/white"
                android:text="@string/close"/>
    </RelativeLayout>
</RelativeLayout>

相关的Activity代码是:

public class VideoFullscreenActivity extends Activity {
    private VideoView video;
    private Button closeButton;
    private MediaController mediaController;
    private boolean toClose;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_fullscreen);

        getActionBar().setHomeButtonEnabled(true);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        video = (VideoView) findViewById(R.id.video);
        closeButton = (Button) findViewById(R.id.buttonClose);
        closeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Log.d("VideoPreview", "onClick Close Button");
                VideoFullscreenActivity.super.onBackPressed();
            }
        });

        Bundle bundle = getIntent().getParcelableExtra("bundle");

        if (bundle != null) {
            Uri videoUri = bundle.getParcelable("data");
            mediaController = new MediaController(this);
            mediaController.setAnchorView(video);
            video.setMediaController(mediaController);
            video.setVideoURI(videoUri);
            video.requestFocus();
            video.start();
        }

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case android.R.id.home:
                finish();
        }
        return (super.onOptionsItemSelected(menuItem));
    }

    @Override
    protected void onResume() {
        Log.i("VideoPreview", "Resume");
        video.resume();
        super.onResume();
    }

    @Override
    protected void onPause() {
        Log.i("VideoPreview", "Pause");
        video.suspend();
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        Log.i("VideoPreview", "Destroy");
        video.stopPlayback();
        super.onDestroy();
    }

}

当我第一次按下“关闭”按钮时,顺序是:

D/VideoPreview﹕ onClick Close Button
I/VideoPreview﹕ Pause
I/VideoPreview﹕ Resume
I/VideoPreview﹕ Destroy

在这个阶段,Activity 不会关闭,它会重新启动并且视频会再次开始播放。要关闭活动,我必须再次按下“关闭”按钮。

当我第二次按下“关闭”按钮时,顺序是:

D/VideoPreview﹕ onClick Close Button
I/VideoPreview﹕ Pause
I/VideoPreview﹕ Destroy

现在,Activity 关闭。

我在 StackOverflow 上发现的一些相关问题:

有人可以向我解释我做错了什么(或未能理解)。

谢谢

【问题讨论】:

    标签: android android-activity android-mediaplayer


    【解决方案1】:

    你可以调用activity的finish()来强制关闭activity

    【讨论】:

      【解决方案2】:

      关闭活动的代码是正确的。问题出在启动 VideoFullscreenActivity 的 Activity 中。有问题的代码是:

          <VideoView
                  android:id="@+id/tag_attach_video"
                  android:layout_width="150dp"
                  android:layout_height="150dp"
                  android:layout_marginTop="10dp"/>
      

      VideoFullscreenActivity 确实在调用 onBackPressed() 时完成了,但早期 Activity 中的 VideoView 仍然处于活动状态,因此需要再次按下。

      我将 VideoView 更改为 ImageView 并使用占位符图像来指示附加数据是视频的事实。这解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多