Android - VideoView 需要按 BACK 两次才能退出

2024-01-11

我有一个显示不同视频文件的活动。当我单击视频文件时,我会进入另一个 Activity,其中 VideoView 会播放视频。

我的问题是,当我想退出此活动并返回到上一个活动时,我应该单击两次后退按钮才能返回。如果我只单击一次,视频会再次开始播放,并且只有在第二次尝试时我才可以退出屏幕。

然后我尝试了这个:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.d(Constants.LOG_TAG, "back pressed in videoplayer");
            finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

而且,尽管我在 logcat 中看到“在视频播放器中按下回键”,但该活动不会退出。我还是应该按两次后退按钮。

EDIT:这是最相关的(我认为)源代码。但请注意,视频是从互联网播放的,我没有使用媒体控制器,而是定义自己的布局并链接到视频视图控件。

public class VideoPlayer extends Activity implements OnClickListener, OnCompletionListener,
        OnSeekBarChangeListener, OnPreparedListener, OnTouchListener {


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

        // Gets the position of clicked video, from an ArrayList of video urls.
        selectedVideo = getPosition();

        // the play button
        play = (ImageButton) findViewById(R.id.play);
        play.setOnClickListener(this);

        videoView = (VideoView) findViewById(R.id.videoView);
        videoView.setOnCompletionListener(this);
        videoView.setOnPreparedListener(this);
        videoView.setOnTouchListener(this);

        // the url to play
        String path = videoUris.get(selectedVideo);
        videoView.setVideoPath(getPath(path));
    }


    /**
     * Play or Pause the current video file.
     * 
     * If the video is paused, then invoking this method should start it. If the video is already playing, then the
     * video should pause.
     */
    private void play() {
        if (!isVideoStarted) {
            isVideoStarted = true;
            videoView.start();
            play.setImageResource(R.drawable.video_pause);
            videoSeekBar.post(updateSeekBarRunnable);
        } else if (isVideoStarted) {
            isVideoStarted = false;
            pause();
        }
    }

    /**
     * Start playing back a video file with the specified Uri.
     */
    private void startPlayback() {
        String path = videoUris.get(selectedVideo);
        videoView.setVideoPath(getPath(path));
        videoView.start();
    }

    /**
     * Stops the currently playing video. (The SeekBar position is reset to beginning, 0.)
     */
    private void stopPlayback() {
        videoView.stopPlayback();
    }

    /**
     * Pause the currently playing video. (The SeekBar remains in its position.)
     */
    private void pause() {
        videoView.pause();


    @Override
    public void onPrepared(MediaPlayer mp) {        
        play();
    }
}

下面的代码对我来说效果很好:

            try
            {
            MediaController mc = new MediaController(YourActivity.this);
            mc.setAnchorView(vd);
            Uri uri = Uri.parse(YourURL);
            vd.setMediaController(mc);
            vd.setVideoURI(uri);
            //vd.start();
            }catch(Exception e)
            {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            vd.requestFocus();
            vd.start();

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - VideoView 需要按 BACK 两次才能退出 的相关文章

  • ImageView 中的全尺寸图像

    我正在尝试在 ImageView 中绘制图像 但我希望它不缩放 并根据需要使用滚动条 我怎样才能做到这一点 现在我只有一个可绘制集作为 XML 中 ImageView 的 android src 这会自动缩放图像以适应屏幕宽度 我读到这可能
  • 如何改变android中menuItem的背景颜色?

    我正在以编程方式将菜单项添加到菜单中 我想在选择特定项目时添加背景颜色 如何为 menuItem 添加背景 您的回答将不胜感激 虽然其他答案提供了更改样式 这会影响all菜单项 据我了解 需要更改一个菜单项 我建议你使用android ac
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • doInBackground 运行时是否可以停止 asynctask?

    我正在 ActivityB Oncreate 中创建异步任务 在该任务中 我正在运行无限 while 循环doInBackground 当我转到上一个活动并再次回到该活动时 创建了另一个异步任务 我的问题现在是两个无限 while 循环正在
  • 如何编辑 gradle 依赖项

    我正在开发一个 android 项目 该项目在我的 gradle 文件中使用以下依赖项 compile com mapzen on the road 1 1 1 我想编辑其中一个文件 以添加一些缺少的功能并为该项目做出贡献 如何下载该项目并
  • 更改 AChartEngine 中的图例大小

    我想专门更改饼图的图例大小输出 我已经尝试了所有可以找到的 AChartEngine 方法 但没有一个只能更改图例文本大小 我必须重写 onDraw 函数吗 如果是这样 怎么办 要设置图例高度 请使用 renderer setLegendH
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • Flutter / FireStore:如何在 Flutter 中显示 Firestore 中的图像?

    我想将我在应用程序中使用的一些图像放入 Firestore 并从那里显示它们 而不是将它们作为资产捆绑在我的应用程序中 为了做到这一点 我想出了以下解决方案 对于我想要显示图像的项目 我创建了一个 Firebase 文档 其中有一个字段存储
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • Cordova 地理定位不适用于 Android

    我想在 Android 上使用地理定位 我用 Apache Cordova 编写应用程序 地理定位在 android 电脑模拟器和 android 手机上均不起作用 I try http cordova apache org docs en
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • 当应用程序未运行时如何堆叠 Firebase Cloud Messaging 通知?

    我在用Firebase Cloud Messaging将推送通知从我的服务器发送到我的 Android 应用程序 当应用程序运行时 通知是stacked因为我将它们设置为我的一个组FirebaseMessagingService 这很好 但
  • 手动启用时 Firebase Crashlytics 不报告崩溃

    Crashlytics 在没有选择加入报告的情况下也能正常工作 但一旦我根据规定设置了选择加入报告 它就会停止报告任何内容tutorial https firebase google com docs crashlytics customi
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • 带有空白白屏的 WebView

    我在 DialogFragment 中有一个 webview 它使用以下方式显示文档和 PDF它可以进行几次尝试 但如果用户尝试频繁打开和关闭对话框 webview 将显示空白屏幕 我已经尝试了所有的线程link1 https stacko
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT
  • gradle-experimental:0.1.0 buildConfigField

    谁知道怎么定义buildConfigField在实验性的 gradle 插件中 android productFlavors create demo applicationId com anthonymandra rawdroid buil
  • 在 Android 中更新到 API 26 时,清单合并失败并出现多个错误

    我尝试使用 API 26 更新我的 gradle 安卓工作室2 3 3 但我在编译项目时遇到以下错误 这是我收到的错误的屏幕截图 应用级别build gradle Top level build file where you can add

随机推荐

  • 为什么我在 Ubuntu 中使用 wget 无法获取此页面? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 http 121 199 111 177 http 121 199 111 177 我用win7 IE8 访问这个网址 没问题 可以获取页面 但如果我
  • Spring 3.1 JSON 日期格式

    我正在使用带注释的 Spring 3 1 MVC 代码 spring mvc 当我通过 RequestBody 发送日期对象时 日期显示为数字 这是我的控制器 Controller RequestMapping test public cl
  • Visual Studio Code 文件。排除设置不起作用

    我正在使用 Unity 并尝试从文件资源管理器侧边栏中排除 meta 文件 我导航到文件 gt 首选项 gt 用户设置 或工作区设置 无关紧要 并将文件的内容设置为以下内容 Place your settings in this file
  • TestCafe - 将选择器的结果存储在变量中

    因此 为了测试 我的搜索结果根据我输入的关键字而有所不同 我想在输入关键字之前存储 searchResults 的节点列表 然后将它们与添加关键字后获得的 searchResults 的节点列表进行比较 但是我无法让它工作 我试过了 let
  • Google Chrome 开发者工具包速度很慢

    我已经使用 Google Chrome 的开发工具包 元素检查 堆栈跟踪 JavaScript 调试等 一段时间了 并取得了巨大的成功 然而 大约两周前 它突然变得非常迟缓 例如 当我右键单击 UI 中的某个元素 然后单击 检查元素 时 或
  • Onedrive cors 在 JavaScript 中下载

    我正在尝试在客户端 JavaScript 中处理 onedrive 文件 但首先我需要一种使用 XMLHttpRequest 下载文件的方法 Onedrive支持cors进行很多操作 但是将文件下载到javascript中存在以下问题 正如
  • 在mysql中创建表约束

    我有一个表 其中有一些列a b c每列都有另一列 例如 x y z 这取决于a b c分别 x y z将会有价值1 if a b c具有任何值并且将包含 null 如果a b c has null 举个例子吧 存储的值a is 2 and
  • 静态档案中的 C 符号可见性

    我有文件 foo c bar c 和 baz c 以及定义函数 myfn 的包装器代码 myfn c 该函数使用其他文件中的代码和数据 我想创建诸如目标文件或存档 myfn o 或 libmyfn a 之类的内容 以便 myfn 可以供其他
  • string.Format() 参数

    可以向 string Format 方法传递多少个参数 必须有某种理论上的或强制的限制 它是否基于 params 类型的限制或使用它的应用程序的内存使用情况或完全基于其他原因 好的 我从隐藏中出现 我使用以下程序来验证发生了什么 而 Mar
  • 不带对话框窗口保存

    我正在尝试编写一个脚本来自动执行 Photoshop CS5 的许多操作 其中一部分涉及保存一堆文件 有没有一种方法可以在不打开对话框窗口的情况下保存文件 我一直在寻找JavaScript 工具指南 http wwwimages adobe
  • 如何在 BigQuery 中取消嵌套两列中的两个列表而不使用叉积作为单独的行

    我在 BigQuery 中有一个表 它有两列 每列包含一个数组 对于给定的行 两列将包含相同长度的数组 但该长度可能因行而异 WITH tbl AS select a b c AS one 1 2 3 as two union all se
  • 如何异步渲染局部视图

    可以异步渲染部分视图吗 我有一个需要渲染博客文章的部分视图 博客文章异步返回 In my Layout文件我渲染我的部分页脚 Footer In Footer我有以下标记 Html Action FooterLatestBlogPosts
  • 在 Dex 阶段构建大型 Codename One 应用程序时出错

    在 dex 阶段发送 Android 构建时 我在构建服务器中遇到错误 谷歌搜索了一下我了解到64K函数有一个硬限制 包括所有库 最重的是google play服务 或者你可以使用多个dex机制 如何为代号一激活此功能 我明白代号一 htt
  • SocketIO 发送给特定用户(无需为每个客户端使用单独的空间)

    我正在尝试开发一个支持后端长任务的网络应用程序 我在用flask socketio与芹菜一起打包在我的服务器上 我的工作流程如下 当客户端打开 Html 页面时 我启动到服务器的套接字连接 该连接为用户创建一个 uid 并将其发回 现在 一
  • 请求/响应日志记录的响应正文

    我正在尝试编写一个 Owin 中间件组件 它将记录每个传入的请求和对数据库的响应 这是我所取得的进展 我被困在阅读response body 上 说 Stream不支持读取 如何读取 Response Body public class L
  • 在自动增量列中插入问题

    如何使用标识插入将数据插入到已定义为自动增量列的列中 请举例说明 如果您有一个 自动增量 列 您确实不应该自己将特定值插入到该列中 毕竟 这就是为什么它是自动增量列 If you must毕竟这样做 那么你需要这样做 SET IDENTIT
  • redirect_uri 的参数值无效:缺少方案:/auth/google_auth_code/callback

    edit 这是一个最小可行的项目 https github com rednebmas google auth code test 似乎是护照谷歌错误 你可能会在这里看到它 https github com jaredhanson pass
  • 重新定义 Python 内置数据类型

    是否可以重新定义括号 使用哪个对象 我可以子类化list对象 但如何使解释器使用我的子类代替内置列表对象 是否可以 我很确定我在这个问题上使用了错误的术语 请随意编辑 gt gt gt class mlist list def init s
  • QueryDSL / JPQL:如何构建连接查询?

    我尝试通读 QueryDSL 文档 但仍然很困惑 我习惯于编写大量 SQL 但这是我第一次真正尝试使用 QueryDSL 和 JPQL JPA2 我有以下实体 Entity public class Provider implements
  • Android - VideoView 需要按 BACK 两次才能退出

    我有一个显示不同视频文件的活动 当我单击视频文件时 我会进入另一个 Activity 其中 VideoView 会播放视频 我的问题是 当我想退出此活动并返回到上一个活动时 我应该单击两次后退按钮才能返回 如果我只单击一次 视频会再次开始播