Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android Notification Builder: Cómo setSound para que el sonido se reproduzca en un looper

Estoy implementando la notificación como a continuación. El sonido predeterminado de la alarma está jugando bien, pero sólo por una vez. Todo lo que quiero es reproducirlo repetidamente hasta que se registre el grifo.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("I Am Fine") .setStyle(new NotificationCompat.BigTextStyle() .bigText(NOTIFICATION_MESSAGE)) .setContentText(NOTIFICATION_MESSAGE) .setAutoCancel(true) .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE); Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); mBuilder.setSound(alarmSound,AudioManager.STREAM_MUSIC); 

El segundo parámetro de setSound no muestra ningún efecto. Por favor ayuda !

3 Solutions collect form web for “Android Notification Builder: Cómo setSound para que el sonido se reproduzca en un looper”

Debe utilizar FLAG_INSISTENT para la notificación. De la documentación : –

Public static final int FLAG_INSISTENT

Bit a ser ejecutado en el campo de banderas que si se establece, el audio se repetirá hasta que se cancele la notificación o se abra la ventana de notificación.

Valor constante: 4 (0x00000004)

  NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Uri soundUri = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_RINGTONE); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( getApplicationContext()).setSmallIcon(R.drawable.ic_launcher) .setContentTitle("title").setContentText("message") .setSound(soundUri); // This sets the sound to play Notification mNotification = mBuilder.build(); mNotification.flags |= Notification.FLAG_INSISTENT; // Display notification notificationManager.notify(1, mNotification); 

He llamado esto bajo el cuerpo del método de SendNotification.

 try { Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); PlaySound(this,notification); } catch (Exception e) { e.printStackTrace(); } 

Definición de PlaySound es la siguiente:

 private void PlaySound(Context context,Uri alert){ try{ mPlayer=new MediaPlayer(); mPlayer.setDataSource(context,alert); final AudioManager am=(AudioManager) getSystemService(Context.AUDIO_SERVICE); if(am.getStreamVolume(AudioManager.STREAM_ALARM)!=0); { mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mPlayer.prepare(); mPlayer.setLooping(true); mPlayer.start(); } }catch(IOException e) { Log.i("AlaramReciever", "no audio file"); } } 

Para detener el sonido cuando se hace una notificación, he cambiado el objeto MediaPlayer a un objeto estático público como se muestra a continuación:

 if(GCMNotificationIntentService.mPlayer != null) { try{ GCMNotificationIntentService.mPlayer.stop(); GCMNotificationIntentService.mPlayer.release(); }finally { GCMNotificationIntentService.mPlayer = null; } } 

La funcionalidad deseada se logra, pero sigo recibiendo después de RunTimeException

Handler android.media.MediaPlayer $ EventHandler que está enviando un mensaje a un Handler en un hilo muerto como onDestroy inmediatamente se llama. Hay alguna forma de prevenir esto ?

Debe silenciar los sonidos de notificación y simplemente reproducir el archivo de sonido de su aplicación mediante un reproductor de medios. Y establezca la instancia del reproductor multimedia en bucle.

Después de esto, debe agregar una variable de intención pendiente con su notificación, una vez que el usuario toque en la notificación, se desencadene el evento asociado y puede detener la instancia del reproductor multimedia desde aquí.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.