我正在写一个应用程序,有时会触发应该播放铃声的提醒.我可以启动铃声OK,但无法阻止它.我的片段中有一个dismiss方法,应该停止当前正在播放的铃声并关闭活动,但它不能正常工作.这是它的作用:
RingtoneManager ringMan = new RingtoneManager(getActivity());
ringMan.stopPreviousRingtone();
getActivity().finish();
Run Code Online (Sandbox Code Playgroud)
该方法确实执行并且活动关闭,但铃声仍在继续播放.我究竟做错了什么?
lmi*_*ika 30
我发现这是唯一可能使用停止铃声RingtoneManager.stopPreviousRingtone()只有当Ringtone是由同一个创建RingtoneManager实例.确认这一点的简单方法是使用一个RingtoneManager和三个按钮创建一个活动:
RingtoneManager启动铃声.stopPreviousRingtone()的RingtoneManager.stopPreviousRingtone()完全不同的RingtoneManager实例.执行此操作后,您会发现只有在单击第二个按钮时才会停止铃声.
如果您可以访问原始Ringtone实例,则只需调用该stop()方法:
Ringtone ringtone = RingtoneManager.getRingtone(getActivity());
ringtone.play();
...
ringtone.stop();
Run Code Online (Sandbox Code Playgroud)
你可以尝试的是创建一个服务,它将在启动时加载和播放铃声,并在铃声被破坏时停止铃声.这是一个例子:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过启动服务在后台启动铃声:
Intent startIntent = new Intent(context, RingtonePlayingService.class);
startIntent.putExtra("ringtone-uri", ringtoneUri);
context.startService(startIntent);
Run Code Online (Sandbox Code Playgroud)
并且,要停止铃声,请停止服务:
Intent stopIntent = new Intent(context, RingtonePlayingService.class);
context.stopService(stopIntent);
Run Code Online (Sandbox Code Playgroud)
小智 5
您必须创建一个从 Service 类扩展的类,下面给出了演示代码
请注意,这是我的大学项目的代码,它用于使用来自 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();
}
}
Run Code Online (Sandbox Code Playgroud)
调用服务的活动代码:
Intent i = new Intent(context, AlarmRing.class);
context.startService(i);
Run Code Online (Sandbox Code Playgroud)
结束或关闭服务的活动:
Intent i = new Intent(this, AlarmRing.class);
stopService(i);`
Run Code Online (Sandbox Code Playgroud)
注意:请注意上下文参考。
| 归档时间: |
|
| 查看次数: |
17710 次 |
| 最近记录: |