gpt4 book ai didi

android - MediaController 3 第二期

转载 作者:行者123 更新时间:2023-11-30 03:31:41 24 4
gpt4 key购买 nike

我正在尝试使用 MediaController 并对其进行更改,使其不会在 3 秒后消失。我在相关问题中找到了这段代码,我正在使用它:

mediaController = new MediaController(this) {   
@Override
public void hide()
{
mediaController.show();
}
};

此代码有效,但是当 Activity 停止时(通过使用后退按钮),我从以下代码中添加的 View 中的 show(0) 语句中获取有关泄漏窗口的日志错误:

public void onPrepared(MediaPlayer mediaPlayer) {

mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.audio_control));

handler.post(new Runnable() {
public void run() {
mediaController.setEnabled(true);
mediaController.show(0);
}
});
}

在我看来,通过简单地调用 show 方法来覆盖 hide 方法意味着 hide 方法在完成 Activity 时没有执行所需的操作。我必须覆盖其他必要的功能,比如实际隐藏 Controller !

我想在必要时隐藏 Controller (例如在完成它时),但不是在它只是在 3 秒后隐藏(并且 Activity 未完成)的情况下。

或者也许我应该让 Controller 一直在 3 秒后消失,但我不确定我是否理解为什么要这样实现。对我来说,将它一直放在那里似乎更好。

最佳答案

这是 MediaController 中的错误:

private View.OnClickListener mPauseListener = new View.OnClickListener() {
public void More ...onClick(View v) {
doPauseResume();
show(sDefaultTimeout);
}
};

有两种方法可以解决这个问题。

A) 覆盖 hide() 方法:

class MyMediaController extends MediaController {
@Override
public void hide() {
// Nope, do not hide. Call hideActually() to actually hide.
}

public void hideActually() {
super.hide();
}
}

B) 覆盖 show() 方法:

class MyMediaController extends MediaController {
public int mTimeout = 0;

@Override
public void show() {
show(mTimeout);
}

@Override
public void show(int timeout) {
super.show(mTimeout);
}
}

覆盖 hide() 方法可以让您完全控制隐藏 MediaController,但您必须确保在 Activity 被销毁之前调用 hideActually(),否则您将获得有关泄漏窗口的这些日志错误。

重写 show() 方法让您有机会设置超时。在这种情况下,MediaController 将隐藏某些事件而不显式调用 hide() 方法,即当用户按下后退按钮时。

就我个人而言,我更喜欢混合使用这两种实现方式:

class MyMediaController extends MediaController {
public int mTimeout = 0;

@Override
public void show() {
show(mTimeout);
}

@Override
public void show(int timeout) {
super.show(mTimeout);
}

@Override
public void hide() {
// Do not hide until a timeout is set
if (mTimeout > 0) super.hide();
}

public void hideActually() {
super.hide();
}
}

在这种情况下,当 mTimeout = 0 时,您可以完全控制显示和隐藏 MediaController,但是当您实际设置超时时,您会得到 MediaController 的“正常”行为。

关于android - MediaController 3 第二期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17344600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com