Jak odtwarzać dźwięk powiadomienia android

Zastanawiałem się, jak mogę odtworzyć dźwięk powiadomienia bez odtwarzania go przez strumień mediów. W tej chwili mogę to zrobić za pośrednictwem odtwarzacza multimedialnego, jednak nie chcę go odtwarzać jako plik multimedialny, chcę go odtwarzać jako powiadomienie lub alert lub dzwonek. oto przykład jak teraz wygląda mój kod:

MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();
Author: rptwsthi, 2010-12-14

9 answers

Jeśli ktoś nadal szuka rozwiązania tego problemu, znalazłem odpowiedź na Jak grać dzwonek / dźwięk alarmu w Androidzie

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

Możesz zmienić TYPE_NOTIFICATION na TYPE_ALARM, ale będziesz chciał śledzić swój dzwonek r, aby przestać go odtwarzać... powiedzmy, kiedy użytkownik kliknie przycisk lub coś.

 364
Author: Phidius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:44

Teraz możesz to zrobić, włączając dźwięk podczas tworzenia powiadomienia, zamiast wywoływać dźwięk osobno.

//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());
 197
Author: Rob Riddle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-28 21:47:09

Jeśli chcesz, aby domyślny dźwięk powiadomienia był odtwarzany, możesz użyć setDefaults (int) metody NotificationCompat.Builder klasy:

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);
Uważam, że to najłatwiejszy sposób na wykonanie zadania.
 46
Author: aga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 11:23:42

Minęło trochę czasu od Twojego pytania, ale ..... Próbowałeś ustawić typ strumienia Audio?

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
Należy to zrobić przed przygotowaniem.
 9
Author: copolii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 19:17:19

Spróbuj tego:

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
Author: Ragu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-21 12:15:55

Możesz użyć Notification i NotificationManager , aby wyświetlić żądane powiadomienie. Następnie możesz dostosować dźwięk, który chcesz odtwarzać za pomocą powiadomienia.

 1
Author: Valentin Rocher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-14 16:28:09

Miałem prawie to samo pytanie. Po niektórych badań, myślę, że jeśli chcesz odtworzyć domyślny system "dźwięk powiadomienia", trzeba dość dużo, aby wyświetlić powiadomienie i powiedzieć, aby użyć domyślnego dźwięku. I jest coś do powiedzenia na argument w niektórych innych odpowiedzi, że jeśli odtwarzasz dźwięk powiadomienia, należy przedstawić jakiś komunikat powiadomienia, jak również.

Jednak małe poprawki API powiadomień i można się zbliżyć do czego chcesz. Możesz wyświetlić puste powiadomienie, a następnie usunąć je automatycznie po kilku sekundach. Myślę, że to zadziała na mnie; może zadziała na Ciebie.

Stworzyłem zestaw wygodnych metod w com.globalmentor.android.app.Notifications.java które pozwalają na utworzenie powiadomienia w taki sposób:

Notifications.notify(this);

Dioda LED będzie również migać, a jeśli masz pozwolenie na wibracje, pojawi się wibracja. Tak, ikona powiadomienia pojawi się na pasku powiadomień, ale zniknie po kilku sekund.

W tym momencie możesz sobie uświadomić, że ponieważ powiadomienie i tak zniknie, równie dobrze możesz mieć przewijaną wiadomość na pasku powiadomień; możesz to zrobić w następujący sposób:

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

Jest wiele innych wygodnych metod w tej klasie. Możesz pobrać całą bibliotekę z jej repozytorium Subversion i zbudować ją za pomocą Mavena. Zależy to od biblioteki globalmentor-core , którą można również zbudować i zainstalować za pomocą Mavena.

 1
Author: Garret Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-05 14:10:32
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
Author: dsc clg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 12:53:22

Myślę, że pojęcie "dźwięk powiadomienia" jest jakoś źle dla Android UI.

Oczekiwane zachowanie Androida polega na użyciu standardowego powiadomienia, aby ostrzec użytkownika. Jeśli odtwarzasz dźwięk powiadomienia bez ikony paska stanu, użytkownik jest zdezorientowany ("co to był za dźwięk? nie ma tu ikony, może mam problemy ze słuchem?").

Jak ustawić dźwięk w powiadomieniu, jest na przykład tutaj: ustawienie dźwięku dla powiadomienia

 0
Author: think01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:35