如何发挥Android的通知声音

问题描述 投票:152回答:10

我不知道我怎么会玩的通知声音,但不播放过的媒体流。现在我可以通过媒体播放器做到这一点,但我不希望它作为一个媒体文件播放,我希望它作为一个通知或提醒铃声播放。继承人什么我的代码看起来像现在的例子:

MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();
android audio notifications
10个回答
401
投票

如果有人仍然在寻找一个解决的办法,我发现在How to play ringtone/alarm sound in Android答案

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

您可以更改TYPE_NOTIFICATION到TYPE_ALARM,但你要保持跟踪你的铃声为r的以停止播放它...比方说,当用户点击一个按钮什么的。


0
投票

设置声音通知通道

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

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

        channel.setSound(alarmUri, attributes);

205
投票

您现在可以通过构建一个通告的时候,而不是单独调用声音包括声音做到这一点。

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

47
投票

如果你想有一个默认的通知声音播放,那么你可以使用setDefaults(int) 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);

我认为,对完成任务的最简单的方法。


10
投票

尝试这个:

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
投票

它已经因为你的问题了一段时间,但是......你有没有尝试设置音频流类型?

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

必须做过准备。


2
投票

我有几乎相同的问题。经过一番研究,我认为,如果你要玩的默认系统“的通知声音”,你很可能显示通知,并告诉它使用默认的声音。而且还有什么可说在一些其他的答案的说法,如果你正在玩一个通知音,你应该提出一些通知消息也是如此。

然而,通知API的一些调整,你可以得到接近你想要什么。您可以显示一个空白的通知,然后在几秒钟后自动将其删除。我认为这会为我工作;也许这会为你工作。

我创建了一组在com.globalmentor.android.app.Notifications.java方便的方法,让你创建一个通知声音是这样的:

Notifications.notify(this);

该指示灯也会闪烁,并且,如果你有震动的权限,会发生振动。是的,通知图标将出现在通知栏,但几秒钟后就会消失。

在这一点上,你可能会意识到,由于通知无论如何都会去的时候,你还不如在通知栏滚动股票消息;你可以是这样做的:

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

有这一类许多其他方便的方法。您可以从Subversion版本库下载全库与Maven构建它。这取决于globalmentor核心库,也可建造和使用Maven安装。


1
投票

您可以使用NotificationNotificationManager显示你想要的通知。然后,您可以自定义要与您的通知,播放声音。


1
投票
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());
    }
}

0
投票

我想,“通知声音”的概念是错误好歹Android的UI。

Android的预期的行为是使用标准的通知,以提醒用户。如果你玩一个通知声音没有状态栏图标,你会得到迷惑用户(“那是什么声音?没有图标这里,也许我有听力问题?”)。

如何设置声音的通知,例如,在这里:Setting sound for notification

© www.soinside.com 2019 - 2024. All rights reserved.