安卓5.0棒棒糖通知声音无法完整播放

3

我有一个闹钟应用程序,当闹钟响起时会播放声音(类似闹铃的连续音频)。不幸的是,在Lollipop版本中,声音并未完全播放,而是在几秒钟后就停止了。但是如果手机连接到电源,这种情况就不会发生,声音可以完全播放。该代码在之前的Android版本上运行良好。请问有人可以帮忙吗?以下是我的通知代码:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setAutoCancel(true)
                .setPriority(Integer.MAX_VALUE)
                .setContentTitle(someTitle)
                .setWhen(now)
                .setIcon(R.drawable.some_icon);

Notification notif = mBuilder.build();

if(Build.VERSION.SDK_INT >= 21) {
    notif.sound = audioFileUri;
    notif.category = Notification.CATEGORY_ALARM;

    AudioAttributes.Builder attrs = new AudioAttributes.Builder();
    attrs.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION);
    attrs.setUsage(useAlarm ? AudioAttributes.USAGE_ALARM : AudioAttributes.USAGE_NOTIFICATION_EVENT);
    notif.audioAttributes = attrs.build();
} else  {
    mBuilder.setSound(audioFileUri, useAlarm ? AudioManager.STREAM_ALARM : AudioManager.STREAM_NOTIFICATION);
    notif = mBuilder.build();
}

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, notif);
1个回答

0

我遇到了同样的问题,很可能是由于Lollipop中新的省电设置导致设备在播放声音时进入睡眠状态。

我的解决方案是使用MediaPlayer类来播放声音,因为它允许设置wakemode。为了使其正常工作,您还需要在清单文件中添加wake_lock权限。

<uses-permission android:name="android.permission.WAKE_LOCK"/>

以下是如何使用MediaPlayer:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
            .setAutoCancel(true)
            .setPriority(Integer.MAX_VALUE)
            .setContentTitle(someTitle)
            .setWhen(now)
            .setIcon(R.drawable.some_icon);

Notification notif = mBuilder.build();

MediaPlayer player = MediaPlayer.create(context, audioFileUri);
player.setAudioStreamType(am.STREAM_MUSIC);
player.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); //<< the important part
player.start();

NotificationManager mNotificationManager = (NotificationManager)    context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, notif);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接