从活动中播放铃声突然停止

时间:2011-12-06 05:27:10

标签: android media ringtone

在我的Android应用程序中,我正在尝试播放当前默认铃声onCreate of my activity。但是铃声不仅会完全播放,而且每次都会以任意长度停止播放。

代码尽可能简单,任何帮助将不胜感激。

Uri currentUri = RingtoneManager.getActualDefaultRingtoneUri(this.context, 
    RingtoneManager.TYPE_RINGTONE);
Ringtone ringtone = RingtoneManager.getRingtone(this.context,currentUri);
if (ringtone != null){
    ringtone.play();
}

2 个答案:

答案 0 :(得分:0)

我正在使用TYPE_NOTIFICATION,但我的代码或多或少完全相同。

我发现在新的Handler中播放声音有助于我的情况:

        Uri currentUri = RingtoneManager.getActualDefaultRingtoneUri(
                this.context, RingtoneManager.TYPE_RINGTONE);
        final Ringtone ringtone = RingtoneManager.getRingtone(this.context,
                currentUri);
        if (ringtone != null) {
            new Handler().post(new Runnable() {

                @Override
                public void run() {
                    ringtone.play();
                }
            });
        }

为什么这会解决问题?

我相信RingtoneManager可能会使用UI线程播放声音,因此如果UI线程用于创建/绘制视图或在播放声音的同时进行计算,则可能会中断。

使用新处理程序时,播放将排队等待,直到其他操作完成后,声音不会中断。

至少这是我的看法:What exactly does the post method do?

答案 1 :(得分:0)

我有同样的问题,上面的答案在我的案例中没有用。

但是铃声在通知中正常工作,所以我发了通知(没有内容)

Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        NotificationCompat.Builder mBuilder;
        mBuilder =
                new NotificationCompat.Builder(this)
                .setSound(alarmSound)
                .setVibrate(new long[]{1000,1000});

        mNotificationManager.notify(ANY_INT_WILL_DO_HERE, mBuilder.build());

它适用于我的情况。我希望这也适合你。

但是我不确定如果我因为播放铃声而做出这个虚假通知是否会造成任何伤害