Âm thanh thông báo Android


152

Tôi đã sử dụng trình xây dựng NotificationCompat mới hơn và tôi không thể nhận được thông báo để phát ra âm thanh. Nó sẽ rung và nhấp nháy ánh sáng. Tài liệu android nói để thiết lập một phong cách mà tôi đã thực hiện với:

builder.setStyle(new NotificationCompat.InboxStyle());

Nhưng không có âm thanh?

Mã đầy đủ:

NotificationCompat.Builder builder =  
        new NotificationCompat.Builder(this)  
        .setSmallIcon(R.drawable.ic_launcher)  
        .setContentTitle("Notifications Example")  
        .setContentText("This is a test notification");  


Intent notificationIntent = new Intent(this, MenuScreen.class);  

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,   
        PendingIntent.FLAG_UPDATE_CURRENT);  

builder.setContentIntent(contentIntent);  
builder.setAutoCancel(true);
builder.setLights(Color.BLUE, 500, 500);
long[] pattern = {500,500,500,500,500,500,500,500,500};
builder.setVibrate(pattern);
builder.setStyle(new NotificationCompat.InboxStyle());
// Add as notification  
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
manager.notify(1, builder.build());  

12
builder.setSound (Cài đặt.System.DEFAULT_NOTIFICATION_URI) cũng sẽ hoạt động
Zar E Ahmer

Câu trả lời:


256

Những gì còn thiếu từ mã trước đây của tôi:

Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);

4
Nó tiếp tục chơi và sẽ không dừng lại, làm thế nào để tôi gọi nó chỉ một lần? sử dụng builder.setOnlyOnce (true); không giúp đỡ
Salis

chơi một lần
blackHawk

2
builder.setOnlyOnce (true) đã giải quyết vấn đề của tôi trong trường hợp của tôi!
ElOjcar

155

Chỉ cần đặt tập tin âm thanh của bạn vào Res\raw\siren.mp3thư mục, sau đó sử dụng mã này:

Đối với âm thanh tùy chỉnh:

Notification notification = builder.build();
notification.sound = Uri.parse("android.resource://"
            + context.getPackageName() + "/" + R.raw.siren);

Đối với âm thanh mặc định:

notification.defaults |= Notification.DEFAULT_SOUND;

Đối với Rung tùy chỉnh:

long[] vibrate = { 0, 100, 200, 300 };
notification.vibrate = vibrate;

Đối với Rung mặc định:

notification.defaults |= Notification.DEFAULT_VIBRATE;

52

Một cách khác cho âm thanh mặc định

builder.setDefaults(Notification.DEFAULT_SOUND);

12

SỬ DỤNG có thể mã hóa

 String en_alert, th_alert, en_title, th_title, id;
 int noti_all, noti_1, noti_2, noti_3, noti_4 = 0, Langage;

 class method
 Intent intent = new Intent(context, ReserveStatusActivity.class);
 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

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


 intent = new Intent(String.valueOf(PushActivity.class));
 intent.putExtra("message", MESSAGE);
 TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
 stackBuilder.addParentStack(PushActivity.class);
 stackBuilder.addNextIntent(intent);
 // PendingIntent pendingIntent =
 stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

 //      android.support.v4.app.NotificationCompat.BigTextStyle bigStyle = new NotificationCompat.BigTextStyle();
 //        bigStyle.bigText((CharSequence) context);



 notification = new NotificationCompat.Builder(context)
    .setSmallIcon(R.mipmap.ic_launcher)
    .setContentTitle(th_title)
    .setContentText(th_alert)
    .setAutoCancel(true)

 // .setStyle(new Notification.BigTextStyle().bigText(th_alert)  ตัวเก่า
 //

 .setStyle(new NotificationCompat.BigTextStyle().bigText(th_title))

    .setStyle(new NotificationCompat.BigTextStyle().bigText(th_alert))

    .setContentIntent(pendingIntent)
    .setNumber(++numMessages)


    .build();

 notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

 notificationManager.notify(1000, notification);

10

Chỉ cần đặt mã đơn giản dưới đây:

notification.sound = Uri.parse("android.resource://"
        + context.getPackageName() + "/" + R.raw.sound_file);

Đối với âm thanh mặc định:

notification.defaults |= Notification.DEFAULT_SOUND;

8

Bạn phải sử dụng Nhạc chuông

private static final int MY_NOTIFICATION_ID = 1;
    private NotificationManager notificationManager;
    private Notification myNotification;

    private final String myBlog = "http://niravranpara.blogspot.com/";

Mã cho noficationmanager với nhạc chuông báo thức, bạn cũng có thể đặt nhạc chuông Ring RingManager.TYPE_RINGTONE

notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri
                        .parse(myBlog));
                  PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                    Notification note = new Notification(R.drawable.ic_launcher, "Alarm", System.currentTimeMillis());
                    note.setLatestEventInfo(getApplicationContext(), "Alarm", "sound" + " (alarm)", pi);
                    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
                    if(alarmSound == null){
                        alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
                        if(alarmSound == null){
                            alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                        }
                    }
                    note.sound = alarmSound;
                    note.defaults |= Notification.DEFAULT_VIBRATE;
                    note.flags |= Notification.FLAG_AUTO_CANCEL;
                    notificationManager.notify(MY_NOTIFICATION_ID, note);

Xin lỗi, đây không phải là cách bạn làm điều đó cho NotificationCompat.Builder mới hơn.
James MV

Thông báo có thể được tạo bằng hàm NotificationCompat.Builder.build () và bạn có thể lấy giá trị trả về của build () và sửa đổi các giá trị của nó trước khi chuyển đến NotificationManager.notify. Nó không có nhiều ý nghĩa, nhưng nó hoàn toàn ổn.
holgac

6

Bạn phải sử dụng xây dựng. setSound

Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class);  

                PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent,   
                        PendingIntent.FLAG_UPDATE_CURRENT);  

                builder.setContentIntent(contentIntent);  
                builder.setAutoCancel(true);
                builder.setLights(Color.BLUE, 500, 500);
                long[] pattern = {500,500,500,500,500,500,500,500,500};
                builder.setVibrate(pattern);
                builder.setStyle(new NotificationCompat.InboxStyle());
                 Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
                    if(alarmSound == null){
                        alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
                        if(alarmSound == null){
                            alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                        }
                    }

                // Add as notification  
                NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
             builder.setSound(alarmSound);
                manager.notify(1, builder.build());  

1
Bạn đã viết RingstyleManager.TYPE_RINGTONE hai lần.
Bernardo Ferrari

6

Bạn có thể tạo một chức năng:

public void playNotificationSound() 
{
    try
    {

        Uri alarmSound = `Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + MyApplication.getInstance().getApplicationContext().getPackageName() + "/raw/notification");`
        Ringtone r = RingtoneManager.getRingtone(MyApplication.getInstance().getApplicationContext(), alarmSound);
        r.play();
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

Gọi chức năng này khi bạn nhận được thông báo.

Ở đây raw là thư mục trong độ phân giải và thông báo là tệp âm thanh trong thư mục thô.


6

Trên Oreo (Android 8) trở lên, nên thực hiện cho âm thanh tùy chỉnh theo cách này (các kênh thông báo):

Uri soundUri = Uri.parse(
                         "android.resource://" + 
                         getApplicationContext().getPackageName() +
                         "/" + 
                         R.raw.push_sound_file);

AudioAttributes audioAttributes = new AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .setUsage(AudioAttributes.USAGE_ALARM)
            .build();

// Creating Channel
NotificationChannel channel = new NotificationChannel("YOUR_CHANNEL_ID",
                                                      "YOUR_CHANNEL_NAME",
                                                      NotificationManager.IMPORTANCE_HIGH);
channel.setSound(soundUri, audioAttributes);

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE))
                                           .createNotificationChannel(notificationChannel);

5

Đầu tiên đặt tệp "yourmp3file" .mp3 vào thư mục thô (tức là trong thư mục Res)

Thứ 2 trong mã của bạn đặt ..

Notification noti = new Notification.Builder(this)
.setSound(Uri.parse("android.resource://" + v.getContext().getPackageName() + "/" + R.raw.yourmp3file))//*see note

Đây là những gì tôi đặt bên trong onClick (Xem v) của mình dưới dạng "bối cảnh (). GetPackageName ()" sẽ không hoạt động từ đó vì nó sẽ không nhận được bất kỳ bối cảnh nào


4

Trong Android OREO hoặc phiên bản mới hơn Sau khi Đăng ký kênh với hệ thống; bạn không thể thay đổi tầm quan trọng hoặc các hành vi thông báo khác sau cùng kênh này (Trước khi gỡ cài đặt ứng dụng)nhập mô tả hình ảnh ở đây

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviors after this
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

channel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI,audioAttributes);

Ưu tiên cũng quan trọng nhất ở đây Đặt thông báo Ưu tiên cao bằng cách sử dụng

Mức độ quan trọng mà người dùng có thể nhìn thấy (Android 8.0 trở lên)

1) Khẩn cấp Tạo âm thanh và xuất hiện dưới dạng thông báo bật lên -> QUAN TRỌNG_HIGH
2) Cao Tạo âm thanh -> QUAN TRỌNG_DEFAULT
3) Trung bình Không có âm thanh -> QUAN TRỌNG_LOW
4) Thấp Không có âm thanh và không xuất hiện trên thanh trạng thái -> QUAN TRỌNG_MIN

cùng làm việc theo thứ tự Ưu tiên (Android 7.1 trở xuống)

1) PRIORITY_HIGH hoặc PRIORITY_MAX

2) ƯU TIÊN_DEFAULT

3) ƯU TIÊN

4) ƯU TIÊN


1
" bạn không thể thay đổi tầm quan trọng hoặc các hành vi thông báo khác sau cùng kênh này ". Cần gỡ cài đặt ứng dụng để thực hiện công việc, kết quả là hành động này đã xóa thông tin của kênh khỏi thiết bị.
Ely Dantas


1
private void showNotification() {

    // intent triggered, you can add other intent for other actions
    Intent i = new Intent(this, MainActivity.class);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, i, 0);

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

    // this is it, we'll build the notification!
    // in the addAction method, if you don't want any icon, just set the first param to 0
    Notification mNotification = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {

        mNotification = new Notification.Builder(this)

           .setContentTitle("Wings-Traccar!")
           .setContentText("You are punched-in for more than 10hrs!")
           .setSmallIcon(R.drawable.wingslogo)
           .setContentIntent(pIntent)
           .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 })
           .addAction(R.drawable.favicon, "Goto App", pIntent)
           .build();

    }

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    // If you want to hide the notification after it was selected, do the code below
    // myNotification.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify(0, mNotification);
}

gọi chức năng này bất cứ nơi nào bạn muốn. cái này làm việc cho tôi


0

bởi thể hiện lớp Notification.builder (trình xây dựng) được đưa ra bên dưới, bạn có thể phát âm thanh mặc định trên thông báo:

builder.setDefaults(Notification.DEFAULT_SOUND);

0
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user);

    btn= findViewById(R.id.btn); 

   btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            notification();
        }
    });
  }   

thông báo void private () {

    NotificationCompat.Builder builder= new NotificationCompat.Builder(this);
    builder.setAutoCancel(true);
    builder.setContentTitle("Work Progress");
    builder.setContentText("Submit your today's work progress");
    builder.setSmallIcon(R.drawable.ic_email_black_24dp);
    Intent intent=new Intent(this, WorkStatus.class);
    PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, intent, 
    PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(pendingIntent);
    builder.setDefaults(Notification.DEFAULT_VIBRATE);
    builder.setDefaults(Notification.DEFAULT_SOUND);

    NotificationManager notificationManager= (NotificationManager) 
    getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(1, builder.build());
}

Đó là thông báo đầy đủ với âm thanh và rung


0

Đừng phụ thuộc vào người xây dựng hoặc thông báo. Sử dụng mã tùy chỉnh để rung.

public static void vibrate(Context context, int millis){
    try {
        Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            v.vibrate(VibrationEffect.createOneShot(millis, VibrationEffect.DEFAULT_AMPLITUDE));
        } else {
            v.vibrate(millis);
        }
    }catch(Exception ex){
    }
}

-1

Bạn có thể làm như sau:

MediaPlayer mp;
mp =MediaPlayer.create(Activity_Order_Visor_Atender.this, R.raw.ok);         
mp.start();

Bạn tạo một gói giữa các tài nguyên của bạn với tên của nguyên và ở đó bạn giữ âm thanh của mình sau đó bạn chỉ cần gọi nó.


-1

// đặt âm thanh thông báo (Đã kiểm tra tối đa Android 10)

builder.setDefaults(Notification.DEFAULT_VIBRATE);
//OR 
builder.setDefaults(Notification.DEFAULT_SOUND);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.