【问题标题】:Check if Android MediaPlayer has been initialized检查Android MediaPlayer是否已经初始化
【发布时间】:2019-08-07 20:17:23
【问题描述】:

如何检查MediaPlayer 对象是否已初始化?有没有类似的东西:

MediaPlayer mp;
if(mp.isInitialized())
    Log.v("Test", "mp has been initialized. :D ");
else
    Log.v("Test", "mp is NOT yet initialized. :( ");

当然,我查了API文档,没有这样的方法,但是有类似的方法吗?

我正在考虑只检查我的代码并捕获抛出的Exception(如果它触发的话),但我觉得这很不雅。 :P

编辑:

我的代码打算这样处理:

MediaPlayer mp;

// Lorem ipsum dolor sit amet consectetur adipisicing...

if(mp.isInitialized)
{
    mp.stop();
}

【问题讨论】:

  • 如果Exception 被声明为由该方法抛出,您是否不需要捕获抛出的Exception
  • 你好,@A--C。请看我的编辑。我的代码打算这样进行。我想我可以这样避免Exception
  • 不,我的意思是,stop() 抛出 IllegalStateException,所以你必须要么 catch 异常 要么 声明你的抛出它的方法(通过 @ 987654330@)。所以不,没有办法检查它是否已初始化,无论如何你最好还是捕获异常。
  • 哦,明白我明白你的意思了。请提供该答案作为答案,以便我接受。谢谢,@A--C! :D

标签: android initialization android-mediaplayer


【解决方案1】:

当一个方法声明它抛出一个异常时,当你使用那个方法时,你有两个选择。使用throws 关键字或catch 异常声明您的方法也抛出异常(可以说是推卸责任)。你必须做其中一件事。

即使文档包含isInitialized() 方法,如果这些方法仍在抛出IllegalStateExceptions,您仍必须通过这两种方法之一来处理它们。

此外,捕捉优雅的,它可以让您的应用程序不会崩溃(崩溃并不优雅)并让您知道有问题。如果您有很多媒体播放器调用(例如在同一方法中一个接一个),您可以将它们全部放在一个 try/catch 块下。

【讨论】:

    【解决方案2】:

    在 mediaPlayer 方法调用周围使用 try 和 catch,如果抛出 IllegalStateException,则它不会被初始化

    try {
       mediaPlayer.isPlaying();
    } catch(IllegalStateException e) {
       // media player is not initialized
    }
    

    【讨论】:

      【解决方案3】:

      两种可能的想法:

      1. 根据您的“预期”代码,为什么不能使用isPlaying() 方法代替所需的isInitialized()?如果它真的在播放某些东西,你不是只想打电话给mp.stop()吗?

      2. 将 mp.stop() 或其他内容放在 OnPreparedListener 中怎么样?

      【讨论】:

      • 你好,@Ben Jakuben。根据 API 文档,如果内部播放器引擎尚未初始化或已释放,isPlaying() 也会调用 IllegalStateException。这就是我不考虑的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2015-08-01
      • 2011-10-12
      • 2015-05-23
      • 2019-01-25
      相关资源
      最近更新 更多