我正在编写一个应用程序,有时会触发应该播放铃声的提醒。我可以启动铃声OK,但无法阻止它。 我的片段中有一个dismiss方法,应该停止当前正在播放的铃声并关闭活动,但它不能正常工作。 这是它的作用:
RingtoneManager ringMan = new RingtoneManager(getActivity());
ringMan.stopPreviousRingtone();
getActivity().finish();
该方法确实执行并且活动关闭,但铃声继续播放。我做错了什么?
答案 0 :(得分:29)
我发现仅当RingtoneManager.stopPreviousRingtone()
由同一Ringtone
实例创建的时,才能使用RingtoneManager
来停止铃声。确认这一点的简单方法是使用RingtoneManager
和三个按钮创建活动:
RingtoneManager
启动铃声。stopPreviousRingtone()
上的RingtoneManager
。stopPreviousRingtone()
个实例上调用RingtoneManager
。执行此操作后,您会发现只有在单击第二个按钮时铃声才会停止。
如果您有权访问原始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();
}
}
然后,只需启动服务即可{@ 3}}后台的铃声:
Intent startIntent = new Intent(context, RingtonePlayingService.class);
startIntent.putExtra("ringtone-uri", ringtoneUri);
context.startService(startIntent);
并且,要停止铃声,只需start服务:
Intent stopIntent = new Intent(context, RingtonePlayingService.class);
context.stopService(stopIntent);
答案 1 :(得分:3)
您必须创建一个从Service类扩展的类,演示代码如下所示
请注意,这是我的College Project的代码表单,它用于使用BroadcastReciever中的铃声启动默认闹钟,从而扩展活动并从不同的正常Android活动中停止铃声。
服务类代码:
import android.app.Service;
import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.IBinder;
public class AlarmRing extends Service {
static Ringtone r;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//activating alarm sound
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
r = RingtoneManager.getRingtone(getBaseContext(), notification);
//playing sound alarm
r.play();
return START_NOT_STICKY;
}
@Override
public void onDestroy()
{
r.stop();
}
}
调用服务的活动代码:
Intent i = new Intent(context, AlarmRing.class);
context.startService(i);
活动结束或关闭服务:
Intent i = new Intent(this, AlarmRing.class);
stopService(i);`
注意:请注意上下文参考。
答案 2 :(得分:0)
使用像这样的应用程序上下文创建RingtoneManager对象
RingtoneManager ringMan = new RingtoneManager(getApplicationContext());
ringMan.stopPreviousRingtone();
和RingTone对象也只是这样创建。
mRingTome = RingtoneManager.getRingtone(getApplicationContext(), notification);
mRingTome.play();
这对我有用。