play - ringtone on android




Como reproduzir um som de notificação do Android (7)

Eu queria saber como reproduzir um som de notificação sem reproduzi-lo no fluxo de mídia. Agora eu posso fazer isso através do media player, no entanto eu não quero jogar como um arquivo de mídia, eu quero jogar como uma notificação ou alerta ou ringtone. Aqui está um exemplo de como meu código se parece agora:

MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();

Acho que o conceito de "som de notificação" está de alguma forma errado para a interface do Android.

O comportamento esperado do Android é usar a Notificação padrão para alertar o usuário. Se você reproduzir um som de notificação sem o ícone da barra de status, ficará confuso ("o que foi esse som? Não há ícone aqui, talvez eu tenha problemas de audição?").

Como definir o som em uma notificação, por exemplo, aqui: Configurando o som para notificação


Agora você pode fazer isso incluindo o som ao criar uma notificação, em vez de chamar o som separadamente.

//Define Notification Manager
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

//Define sound URI
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext())
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(message)
        .setSound(soundUri); //This sets the sound to play

//Display notification
notificationManager.notify(0, mBuilder.build());

Eu tinha praticamente a mesma pergunta. Depois de alguma pesquisa, eu acho que se você quiser tocar o sistema padrão de "som de notificação", você tem que exibir uma notificação e dizer para usar o som padrão. E há algo a ser dito para o argumento em algumas das outras respostas que, se você estiver tocando um som de notificação, também deverá apresentar uma mensagem de notificação.

No entanto, um pouco de ajustes na API de notificação e você pode chegar perto do que deseja. Você pode exibir uma notificação em branco e removê-la automaticamente após alguns segundos. Eu acho que isso vai funcionar para mim; Talvez funcione para você.

Eu criei um conjunto de métodos de conveniência em com.globalmentor.android.app.Notifications.java que permitem criar um som de notificação como este:

Notifications.notify(this);

O LED também piscará e, se você tiver permissão de vibração, ocorrerá uma vibração. Sim, um ícone de notificação aparecerá na barra de notificação, mas desaparecerá depois de alguns segundos.

Neste ponto, você pode perceber que, uma vez que a notificação irá embora de qualquer maneira, você pode também ter uma mensagem de rolagem na barra de notificação; você pode fazer isso assim:

Notifications.notify(this, 5000, "This text will go away after five seconds.");

Existem muitos outros métodos de conveniência nesta classe. Você pode baixar toda a biblioteca de seu repositório Subversion e construí-lo com o Maven. Depende da biblioteca globalmentor-core, que também pode ser construída e instalada com o Maven.


Já faz um tempo desde a sua pergunta, mas ... Você já tentou definir o tipo de fluxo de áudio?

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

Deve ser feito antes de preparar.


Se você quiser que um som de notificação padrão seja reproduzido, então você pode usar o método setDefaults(int) da classe NotificationCompat.Builder :

NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle(getString(R.string.app_name))
                .setContentText(someText)
                .setDefaults(Notification.DEFAULT_SOUND)
                .setAutoCancel(true);

Eu acredito que é a maneira mais fácil de realizar sua tarefa.


Tente isto:

public void ringtone(){
    try {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
        r.play();
     } catch (Exception e) {
         e.printStackTrace();
     }
}

Intent intent = new Intent(this, MembersLocation.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("type",type);
    intent.putExtra("sender",sender);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    String channelId = getString(R.string.default_notification_channel_id);

    Uri Emergency_sound_uri=Uri.parse("android.resource://"+getPackageName()+"/raw/emergency_sound");
   // Uri Default_Sound_uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    if(type.equals("emergency"))
    {
        playSound=Emergency_sound_uri;
    }
    else
    {
        playSound= Settings.System.DEFAULT_NOTIFICATION_URI;
    }

    NotificationCompat.Builder notificationBuilder =
            new NotificationCompat.Builder(this, channelId)
                    .setSmallIcon(R.drawable.ic_notification)
                    .setContentTitle(title)
                    .setContentText(body)
                    .setSound(playSound, AudioManager.STREAM_NOTIFICATION)
                    .setAutoCancel(true)
                    .setColor(getColor(R.color.dark_red))
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setContentIntent(pendingIntent);

   // notificationBuilder.setOngoing(true);//for Android notification swipe delete disabling...

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    // Since android Oreo notification channel is needed.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId,
                "Channel human readable title",
                NotificationManager.IMPORTANCE_HIGH);
        AudioAttributes att = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
                .build();
        channel.setSound(Emergency_sound_uri, att);
        if (notificationManager != null) {
            notificationManager.createNotificationChannel(channel);
        }
    }

    if (notificationManager != null) {
        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
}




notifications