stopPreviousRingtone() が着信音を停止しない理由
同じインスタンスによって作成されたRingtoneManager.stopPreviousRingtone()
場合にのみ、を使用してのみ着信音を停止できることがわかりました。これを確認する簡単な方法は、1 つと 3 つのボタンを持つアクティビティを作成することです。Ringtone
RingtoneManager
RingtoneManager
- 最初のボタンをクリックすると、 を使用し
RingtoneManager
て着信音が開始されます。
- 2 番目のボタンをクリックすると、 が呼び出さ
stopPreviousRingtone()
れますRingtoneManager
。
- 3 番目のボタンをクリックすると
stopPreviousRingtone()
、まったく別のRingtoneManager
インスタンスが呼び出されます。
これを行った後、2番目のボタンをクリックした場合にのみ着信音が停止することがわかります。
元の Ringtone インスタンスにアクセスできる場合の Ringtone の停止
Ringtone
元のインスタンスにアクセスできる場合は、stop()
メソッドを呼び出すだけです。
Ringtone ringtone = RingtoneManager.getRingtone(getActivity());
ringtone.play();
...
ringtone.stop();
元の着信音への参照を維持できない場合に着信音を停止することはできません
試してみることができるのは、開始時に着信音をロードして再生し、破棄されたときに着信音を停止するサービスを作成することです。次に例を示します。
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();
}
}
次に、サービスを開始するだけでバックグラウンドで着信音を開始できます。
Intent startIntent = new Intent(context, RingtonePlayingService.class);
startIntent.putExtra("ringtone-uri", ringtoneUri);
context.startService(startIntent);
着信音を停止するには、サービスを停止します。
Intent stopIntent = new Intent(context, RingtonePlayingService.class);
context.stopService(stopIntent);