gpt4 book ai didi

android - 如何停止当前正在播放的铃声?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:36 25 4
gpt4 key购买 nike

我正在编写一个应用程序,有时会触发应该播放铃声的提醒。我可以正常启动铃声,但无法停止。我的 fragment 中有一个 dismiss 方法,应该停止当前播放的铃声并关闭 Activity ,但它不能正常工作。这是它的作用:

    RingtoneManager ringMan = new RingtoneManager(getActivity());
ringMan.stopPreviousRingtone();
getActivity().finish();

该方法确实得到执行并且 Activity 关闭,但铃声仍在播放。我做错了什么?

最佳答案

stopPreviousRingtone() 没有停止铃声的原因

我发现只有当 Ringtone 由相同的 RingtoneManager 创建时,才能使用 RingtoneManager.stopPreviousRingtone() 停止铃声实例。确认这一点的一种简单方法是使用 RingtoneManager 和三个按钮创建一个 Activity :

  1. 单击第一个按钮将使用 RingtoneManager 启动铃声。
  2. 单击第二个按钮将调用 RingtoneManager 上的 stopPreviousRingtone()
  3. 单击第三个按钮将在完全不同的 RingtoneManager 实例上调用 stopPreviousRingtone()

这样做之后,您应该会发现只有单击第二个按钮时铃声才会停止。

如果您有权访问原始铃声实例,则停止铃声

如果您有权访问原始的 Ringtone 实例,您只需调用 stop() 方法即可:

Ringtone ringtone = RingtoneManager.getRingtone(getActivity());
ringtone.play();
...
ringtone.stop();

无法保留对原始铃声的引用时停止铃声

您可以尝试创建一个 service它将在启动时加载并播放铃声,并在铃声被销毁时停止。这是一个例子:

public class RingtonePlayingService extends Service
{
private Ringtone ringtone;

@Override
public IBinder onBind(Intent intent)
{
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Uri ringtoneUri = Uri.parse(intent.getExtras().getString("ringtone-uri"));

this.ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
ringtone.play();

return START_NOT_STICKY;
}

@Override
public void onDestroy()
{
ringtone.stop();
}
}

然后,您可以start只需启动服务即可在后台播放铃声:

Intent startIntent = new Intent(context, RingtonePlayingService.class);
startIntent.putExtra("ringtone-uri", ringtoneUri);
context.startService(startIntent);

而且,要停止铃声,只需 stop服务:

Intent stopIntent = new Intent(context, RingtonePlayingService.class);
context.stopService(stopIntent);

关于android - 如何停止当前正在播放的铃声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089380/

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