2014-10-06 107 views
1

我已经搜索了这个,很抱歉,如果这已被回答(我很乐意被重定向),但具体而言,我们的问题是间歇性的。Android通知声音没有播放,间歇性地

我们的客户抱怨说,当通过我们的软件将事件发送到他们的手机时,通知音频间歇性地不会“鸣叫”。它可以很好地工作一段时间,然后“停下来几个小时”(从客户的投诉中推断出来)。

我们没有能够在内部重现这一点,但我们从客户那里得到的挫折是我们真的需要修复它。

我们的客户坚持说他们没有拨打电话,播放音频或运行其他软件,也没有看到他们的手机,我基本上相信他们。

我们已经注意到这在很大程度上在果冻豆,因为这是我们大多数客户正在运行,但它可能不孤立到这种情况。

我做错了什么,或者是否有更好的方式来为通知'编钟'。在这个阶段,我很高兴地尝试不同的东西

void updateNotification() 
{ 
    Notification.Builder builder = new Notification.Builder(_context); 

    // Set the appearance of the notification: 
    int icon; 
    String title; 
    String description; 

    // ... 
    //CODE setting icon, title and description 
    // ... 

    builder.setSmallIcon(icon); 
    builder.setContentTitle(title); 
    builder.setContentText(description); 
    builder.setTicker(description); 

    // Set the sound for the notification: 
    builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)); 

    Intent intent = new Intent(_context, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    intent.putExtra(MainActivity.EXTRA_TAB, MainActivity.EXTRA_TAB_TASKS); 

    builder.setContentIntent(PendingIntent.getActivity(_context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 

    // Update the notification: 
    NotificationManager manager = (NotificationManager)_context.getSystemService(Context.NOTIFICATION_SERVICE); 
    manager.notify(_notificationId, builder.build()); 
} 

回答

0

虽然@Ricardo给了肯定是值得包括在你的代码的答案,而且我我们的问题主要是由于手机的电源管理(这可能很明显,但我对Android开发很陌生)。

我们的通知在发送时需要发送,而且我们的用户手机正在进入睡眠模式,所以我们添加了一个WakeLock(尽管,关心他们的电池寿命,我们只有在用户'登录'到我们的应用程序。在他们转换结束时,WakeLock被释放)。

1

出于某种原因,我注意到一些设备静音所有卷(包括报警音量)时,他们都穿上了静音或振动模式。在这些模式下,对于这些设备,除非您更改模式,否则无法更改此音量。

我有用户抱怨类似的问题,必须通过强制改变模式来确保音量足够高来处理它。然后我播放了音频并将模式切换回原始配置。

编辑:Here is a post来自用户抱怨这一点。请注意,屏幕截图上的“警报”的音量按钮在静音时被禁用。

编辑2:在我的具体情况,我运行下面的检查,看是否我需要提高音量:

if (audioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL 
      && audioManager.getStreamVolume(AudioManager.STREAM_ALARM) == 0) { 
    // Save current state and increase the volume 
} 
+0

谢谢,我会放弃这一点。 – johnc 2014-10-06 22:20:31

+0

感谢您的编辑,你是指的AudioManager.getRingerMode()? – johnc 2014-10-06 22:28:54

+0

是的,如果“getRingerMode()!= AudioManager.RINGER_MODE_NORMAL”,表示它处于静音或振动状态。看到我的其他编辑。 – 2014-10-06 22:38:33