Getar dan Suara default pada pemberitahuan

93

Saya mencoba untuk mendapatkan getar dan peringatan suara default ketika pemberitahuan saya masuk, tapi sejauh ini tidak berhasil. Saya membayangkan itu ada hubungannya dengan cara saya mengatur default, tetapi saya tidak yakin bagaimana memperbaikinya. Ada pemikiran?

public void connectedNotify() {
    Integer mId = 0;
    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_notify)
            .setContentTitle("Device Connected")
            .setContentText("Click to monitor");

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

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent =     
          PendingIntent.getActivity(getApplicationContext(), 
          0, 
          resultIntent,  
          PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(resultPendingIntent);
    mBuilder.setOngoing(true);
    Notification note = mBuilder.build();
    note.defaults |= Notification.DEFAULT_VIBRATE;
    note.defaults |= Notification.DEFAULT_SOUND;
    NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(mId, note);

}
Dave Moore
sumber
3
Semua jawaban hanya mengulangi beberapa variasi kode yang sudah Anda miliki, dan tidak ada yang menjawab pertanyaan menurut saya. Kode Anda terlihat bagus, AFAICT. Kemungkinan besar, Anda baru saja melewatkan android.permission.VIBRATEAndroidManifest.xml.
Olaf Dietsche
Kepada siapa yang mungkin menerapkan solusi di utas ini dan masih tidak memiliki getaran pada pemberitahuan, Anda mungkin perlu mengaktifkan getaran saluran pemberitahuan Anda terlebih dahulu. Lihatlah ini: stackoverflow.com/a/47646166/8551764
Mostafa Arian Nejad

Jawaban:

204

Beberapa kode tiruan mungkin bisa membantu Anda.

   private static NotificationCompat.Builder buildNotificationCommon(Context _context, .....) {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(_context)
            .setWhen(System.currentTimeMillis()).......;
     //Vibration
        builder.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });

     //LED
        builder.setLights(Color.RED, 3000, 3000);

     //Ton
        builder.setSound(Uri.parse("uri://sadfasdfasdf.mp3"));

    return builder;
   }

Tambahkan izin di bawah ini untuk Getaran dalam AndroidManifest.xmlfile

<uses-permission android:name="android.permission.VIBRATE" />
TeeTracker
sumber
115
vibrateFitur +1 membutuhkan <uses-permission android:name="android.permission.VIBRATE" />izin
ashakirov
1
Dalam beberapa kasus, Anda harus menggunakan format argb warna hex, seperti 0xffffffff, daripada Color.White, karena ada kemungkinan kecil perangkat pengguna menggunakan Color (RGB) untuk parameter ARGB dan Anda akan mendapatkan warna yang salah. Ini Terjadi dengan saya.
Beto Caldas
55
Getaran sekarang memiliki jeda 1000 ms. Jika Anda menyetel yang pertama ke 0, ini akan langsung berbunyi. Ini adalah pola {tunda, getar, tidur, getar, tidur}.
Tom
11
Saya tidak perlu menambah <uses-permission android:name="android.permission.VIBRATE" />pekerjaan.
Iqbal
1
Adakah yang tahu cara menggunakan setSound di API 26?
Rodrigo Manguinho
61

Perpanjangan jawaban TeeTracker,

untuk mendapatkan suara notifikasi default Anda dapat melakukan hal berikut

NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_notify)
            .setContentTitle("Device Connected")
            .setContentText("Click to monitor");

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

Ini akan memberi Anda suara notifikasi default.

nikoo28
sumber
35

Notifikasi Getar

mBuilder.setVibrate(new long[] { 1000, 1000});

Suara

mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);

untuk opsi suara lainnya

Cristiana Chavez
sumber
2
Untuk yang getar, pastikan untuk memasukkan <uses-permission android:name="android.permission.VIBRATE" />dalam AndroidManifest.xml
Aaron Esau
berapa lama getaran ini berlangsung? atau apakah itu hanya akan bergetar sekali?
Zapnologica
13

Ini bekerja dengan baik untuk saya, Anda dapat mencobanya.

 protected void displayNotification() {

        Log.i("Start", "notification");

      // Invoking the default notification service //
        NotificationCompat.Builder  mBuilder =
                new NotificationCompat.Builder(this);
        mBuilder.setAutoCancel(true);

        mBuilder.setContentTitle("New Message");
        mBuilder.setContentText("You have "+unMber_unRead_sms +" new message.");
        mBuilder.setTicker("New message from PayMe..");
        mBuilder.setSmallIcon(R.drawable.icon2);

      // Increase notification number every time a new notification arrives //
        mBuilder.setNumber(unMber_unRead_sms);

      // Creates an explicit intent for an Activity in your app //

        Intent resultIntent = new Intent(this, FreesmsLog.class);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addParentStack(FreesmsLog.class);

      // Adds the Intent that starts the Activity to the top of the stack //
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(
                        0,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );
        mBuilder.setContentIntent(resultPendingIntent);

      //  mBuilder.setOngoing(true);
        Notification note = mBuilder.build();
        note.defaults |= Notification.DEFAULT_VIBRATE;
        note.defaults |= Notification.DEFAULT_SOUND;

        mNotificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      // notificationID allows you to update the notification later on. //
        mNotificationManager.notify(notificationID, mBuilder.build());

    }
Selim Raza
sumber
10

Ini adalah cara sederhana untuk memanggil notifikasi dengan menggunakan getar dan suara default dari sistem.

private void sendNotification(String message, String tick, String title, boolean sound, boolean vibrate, int iconID) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);
    Notification notification = new Notification();

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);

    if (sound) {
        notification.defaults |= Notification.DEFAULT_SOUND;
    }

    if (vibrate) {
        notification.defaults |= Notification.DEFAULT_VIBRATE;
    }

    notificationBuilder.setDefaults(notification.defaults);
    notificationBuilder.setSmallIcon(iconID)
            .setContentTitle(title)
            .setContentText(message)
            .setAutoCancel(true)
            .setTicker(tick)
            .setContentIntent(pendingIntent);

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

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}

Tambahkan izin getar jika Anda akan menggunakannya:

<uses-permission android:name="android.permission.VIBRATE"/>

Semoga berhasil,'.

Maher Abuthraa
sumber
Dapatkah seseorang memberi tahu saya mengapa getaran tidak berfungsi saat telepon sedang dalam panggilan? ATAU dapatkah kita membuat pemberitahuan untuk memaksa getar bahkan saat telepon sedang dalam panggilan
Ini membantu saya notificationBuilder.setDefaults (notification.defaults);
Saveen
@ user526206, saya tidak tahu. Saya tidak pernah mengujinya. Anda dapat membuka pertanyaan baru karena ini tidak ada hubungannya dengan perilaku pemberitahuan.
Maher Abuthraa
7

Saya menggunakan kode followung dan berfungsi dengan baik untuk saya.

private void sendNotification(String msg) {
    Log.d(TAG, "Preparing to send notification...: " + msg);
    mNotificationManager = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, MainActivity.class), 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("GCM Notification")
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    Log.d(TAG, "Notification sent successfully.");
}
Suresh kumar
sumber
2

// setel audio notifikasi

builder.setDefaults(Notification.DEFAULT_VIBRATE);
//OR 
builder.setDefaults(Notification.DEFAULT_SOUND);
Mayuri Khinvasara
sumber
1

Untuk Kotlin Anda bisa Coba ini.

var builder = NotificationCompat.Builder(this,CHANNEL_ID)<br/>
     .setVibrate(longArrayOf(1000, 1000, 1000, 1000, 1000))<br/>
     .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
Sachin Shakya
sumber
1

Untuk mendukung SDK versi> = 26, Anda juga harus membangun NotificationChanel dan mengatur pola getaran dan suara di sana. Ada contoh kode Kotlin:

    val vibrationPattern = longArrayOf(500)
    val soundUri = "<your sound uri>"

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val notificationManager =    
                 getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            val attr = AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_ALARM)
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .build()
            val channelName: CharSequence = Constants.NOTIFICATION_CHANNEL_NAME
            val importance = NotificationManager.IMPORTANCE_HIGH
            val notificationChannel =
                NotificationChannel(Constants.NOTIFICATION_CHANNEL_ID, channelName, importance)
                notificationChannel.enableLights(true)
                notificationChannel.lightColor = Color.RED
                notificationChannel.enableVibration(true)
                notificationChannel.setSound(soundUri, attr)
                notificationChannel.vibrationPattern = vibrationPattern
                notificationManager.createNotificationChannel(notificationChannel)
    }

Dan ini pembangunnya:

 with(NotificationCompat.Builder(applicationContext, Constants.NOTIFICATION_CHANNEL_ID)) {
        setContentTitle("Some title")
        setContentText("Some content")
        setSmallIcon(R.drawable.ic_logo)
        setAutoCancel(true)    
        setVibrate(vibrationPattern)
        setSound(soundUri)
        setDefaults(Notification.DEFAULT_VIBRATE)
        setContentIntent(
            // this is an extension function of context you should build
            // your own pending intent and place it here
            createNotificationPendingIntent(
                Intent(applicationContext, target).apply {
                    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                }
            )
        )

        return build()
    }

Pastikan Anda AudioAttributesdipilih dengan benar untuk membaca lebih lanjut di sini .

MeLine
sumber