it-swarm.com.de

So spielen Sie einen Android-Benachrichtigungston ab

Ich habe mich gefragt, wie ich einen Benachrichtigungston abspielen kann, ohne ihn über den Medienstrom abzuspielen. Im Moment kann ich dies über den Mediaplayer machen, aber ich möchte nicht, dass es als Mediendatei abgespielt wird, sondern als Benachrichtigung, Alarm oder Klingelton. Hier ist ein Beispiel, wie mein Code gerade aussieht:

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

Wenn jemand noch nach einer Lösung dafür sucht, habe ich eine Antwort gefunden unter Wie man Klingelton/Alarmton in Android abspielt

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

Sie können TYPE_NOTIFICATION in TYPE_ALARM ändern. Sie sollten jedoch den Klingelton r überwachen, um die Wiedergabe zu stoppen. Sagen Sie beispielsweise, wenn der Benutzer auf eine Schaltfläche oder etwas anderes klickt.

376
Phidius

Sie können dies jetzt tun, indem Sie den Sound beim Erstellen einer Benachrichtigung einschließen, anstatt den Sound separat aufzurufen.

//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());
199
Rob Riddle

Wenn Sie möchten, dass ein Standardbenachrichtigungston abgespielt wird, können Sie die Methode setDefaults (int) der Klasse NotificationCompat.Builder verwenden:

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);

Ich glaube, das ist der einfachste Weg, um Ihre Aufgabe zu erledigen.

46
aga

Es ist schon eine Weile her, seit Ihre Frage, aber ... Haben Sie versucht, den Audio-Stream-Typ einzustellen?

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

Es muss vor der Vorbereitung erfolgen.

9
copolii

Versuche dies: 

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

Ich hatte so ziemlich die gleiche Frage. Nach einigen Nachforschungen denke ich, dass, wenn Sie das Standardsystem "Benachrichtigungston" spielen möchten, Sie eine Benachrichtigung anzeigen müssen, die den Standardton verwendet. In einigen der anderen Antworten gibt es etwas zu dem Argument, dass, wenn Sie einen Benachrichtigungston abspielen, auch eine Benachrichtigungsnachricht angezeigt werden sollte.

Eine kleine Änderung der Benachrichtigungs-API ermöglicht es Ihnen jedoch, das zu erreichen, was Sie möchten. Sie können eine leere Benachrichtigung anzeigen und nach einigen Sekunden automatisch entfernen. Ich denke, das wird für mich funktionieren. vielleicht klappt es bei dir.

Ich habe in com.globalmentor.Android.app.Notifications.Java eine Reihe bequemer Methoden erstellt, mit denen Sie einen Benachrichtigungston wie folgt erstellen können:

Notifications.notify(this);

Die LED blinkt ebenfalls, und wenn Sie Vibrationserlaubnis haben, tritt eine Vibration auf. Ja, ein Benachrichtigungssymbol wird in der Benachrichtigungsleiste angezeigt, verschwindet jedoch nach einigen Sekunden.

An diesem Punkt stellen Sie möglicherweise fest, dass sich die Benachrichtigung ohnehin verschwindet. In der Benachrichtigungsleiste befindet sich möglicherweise auch eine Ticker-Meldung. Das kannst du so machen:

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

Es gibt viele andere Komfortmethoden in dieser Klasse. Sie können die gesamte Bibliothek aus ihrem Subversion-Repository herunterladen und mit Maven erstellen. Dies hängt von der globalmentor-core-Bibliothek ab, die auch mit Maven erstellt und installiert werden kann.

2
Garret Wilson
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());
    }
}
1
dsc clg

Sie können Notification und NotificationManager verwenden, um die gewünschte Benachrichtigung anzuzeigen. Sie können dann den Sound, den Sie abspielen möchten, mit Ihrer Benachrichtigung anpassen.

1
Valentin Rocher

Stellen Sie den Ton auf den Benachrichtigungskanal ein

        Uri alarmUri = Uri.fromFile(new File(<path>));

        AudioAttributes attributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_ALARM)
                .build();

        channel.setSound(alarmUri, attributes);
0

Ich denke, das Konzept von "Benachrichtigungston" ist für Android UI etwas falsch.

Das erwartete Verhalten von Android besteht in der Verwendung der Standardbenachrichtigung, um den Benutzer zu warnen. Wenn Sie einen Benachrichtigungston ohne das Symbol der Statusleiste abspielen, wird der Benutzer verwirrt ("Was war das für ein Geräusch? Hier ist kein Symbol, möglicherweise habe ich Hörprobleme?").

So stellen Sie den Ton für eine Benachrichtigung ein: Ton für die Benachrichtigung einstellen

0
think01