我正在编写一个应用程序,有时会触发应该播放铃声的提醒。我可以正常启动铃声,但无法停止。 我的 fragment 中有一个 dismiss 方法,应该停止当前播放的铃声并关闭 Activity ,但它不能正常工作。 这是它的作用:
RingtoneManager ringMan = new RingtoneManager(getActivity());
ringMan.stopPreviousRingtone();
getActivity().finish();
该方法确实得到执行并且 Activity 关闭,但铃声仍在播放。我做错了什么?
最佳答案
stopPreviousRingtone() 没有停止铃声的原因
我发现只有当 Ringtone
由相同的 RingtoneManager 创建时,才能使用
实例。确认这一点的一种简单方法是使用 RingtoneManager.stopPreviousRingtone()
停止铃声RingtoneManager
和三个按钮创建一个 Activity :
- 单击第一个按钮将使用
RingtoneManager
启动铃声。 - 单击第二个按钮将调用
RingtoneManager
上的stopPreviousRingtone()
。 - 单击第三个按钮将在完全不同的
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/