5

在我的 android 应用程序中,我正在尝试播放我的活动的当前默认铃声 onCreate。但是铃声不会每次都完全播放并以任意长度停止。

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

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

2 回答 2

0

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

我发现在新的处理程序中播放声音对我的情况有帮助:

        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 线程习惯于在播放声音的同时创建/绘制视图或进行计算,它就有被中断的风险。

当使用新的处理程序时,播放会排队等待其他操作之后,使声音不会中断。

至少这是我的看法:post 方法到底是做什么的?

于 2013-12-12T19:48:09.257 回答
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());

它在我的情况下有效。我希望这也适用于你。

但是我不确定如果我只是为了播放铃声而发出这个错误通知是否会造成任何伤害

于 2014-09-27T10:35:51.423 回答