在Android中停止本地通知声音

时间:2017-04-11 06:30:37

标签: android

我已经用声音实现了本地通知。它正常工作,但当我清除本地通知时,我正在播放的自定义声音应该停止。

Uri uri = null;
String[] split = content.split("-");
Intent intents = new Intent(context, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intents, 0);
//getting audio from raw folder
uri = Uri.parse("android.resource://" + context.getPackageName() + "/" +R.raw.beep);

//plays audio infinite times until user clicks or clear notification
try 
{
    MediaPlayer player = MediaPlayer.create(context, uri);
    player.setLooping(true);
    player.start();

    Notification noti = new Notification.Builder(context)
        .setContentTitle(split[0])
        .setContentText(device_name + split[1]).setSmallIcon(R.drawable.hi_notification)
        .setContentIntent(pIntent)
        .setDefaults(Notification.DEFAULT_ALL)
        .setPriority(Notification.PRIORITY_HIGH)
        .build();

    noti.sound = uri;
    noti.defaults = Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE;

    NotificationManager notificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);
    // hide the notification after its selected
    noti.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE;

    notificationManager.notify(0, noti);
}
catch (IllegalStateException e) 
{
    e.printStackTrace();
}         

1 个答案:

答案 0 :(得分:0)

将通知声音设置为INSISTENT。

1.Notification.DEFAULT_SOUND:用于播放声音。

2.Notification.FLAG_INSISTENT:此标志会让您的声音持续响起,直到您对通知进行了少量操作,即拖动栏或单击栏。

3.Notification.FLAG_AUTO_CANCEL:此标志用于在您看到通知后自动取消通知

builder.setSmallIcon(R.mipmap.app_icon).setContentTitle(title)
            .setContentText(msg)
            .setColor(getResources().getColor(R.color.white))
            .addAction(R.drawable.alarm_off, getString(R.string.dismiss), pendingIntent)
            .setOngoing(true)
            .setSound(Uri.parse(path));

    Notification notification = builder.build();
    notification.flags |= Notification.FLAG_INSISTENT;


    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(WAKE_UP_ALARM_ID, notification)