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

标签 android ringtone

我正在编写一个应用程序,有时会触发应该播放铃声的提醒。我可以正常启动铃声,但无法停止。 我的 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/

相关文章:

android - 如果其他视频/音频开始在android中播放,如何停止媒体播放器

android - 如何从 Android 应用程序将铃声音量从低调到高

android - MediaPlayer setDataSource 失败,状态 = 0x80000000 为 2.3.4 上的文件路径设置的铃声

ios - 访问 iPhone 中的声音设置

android - Jenkins phonegap 错误 : Cannot read property 'install' of undefined

Android VideoView比例缩放

Android获取值类似于的数据库列的总和

android - Appcelerator Titanium - 如何将数据库备份到云端 (Android)?

android - 尽管当前短信铃声设置如何,但如何更改 Android 短信铃声?

iphone - 如何将录制的声音用作铃声