Die Standardeinstellungen für Vibration und Sound bei Benachrichtigung

93

Ich versuche, eine Standard-Vibrations- und akustische Warnung zu erhalten, wenn meine Benachrichtigung eingeht, aber bisher kein Glück. Ich kann mir vorstellen, dass dies etwas mit der Art und Weise zu tun hat, wie ich die Standardeinstellungen festgelegt habe, aber ich bin mir nicht sicher, wie ich sie beheben soll. Irgendwelche Gedanken?

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
quelle
3
Alle Antworten wiederholen nur einige Variationen des Codes, den Sie bereits haben, und keine von ihnen beantwortet die Frage meiner Meinung nach. Ihr Code sieht gut aus, AFAICT. Höchstwahrscheinlich fehlen Sie nur android.permission.VIBRATEin AndroidManifest.xml.
Olaf Dietsche
Für wen, der möglicherweise Lösungen in diesem Thread anwendet und bei Benachrichtigungen noch keine Vibration aufweist, müssen Sie möglicherweise zuerst die Vibration Ihres Benachrichtigungskanals aktivieren. Schauen Sie sich das an: stackoverflow.com/a/47646166/8551764
Mostafa Arian Nejad

Antworten:

203

Einige Dummy-Codes könnten Ihnen helfen.

   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;
   }

Fügen Sie unten die Berechtigung für Vibration in AndroidManifest.xmlDatei hinzu

<uses-permission android:name="android.permission.VIBRATE" />
TeeTracker
quelle
114
+1 vibrateFunktion erfordert <uses-permission android:name="android.permission.VIBRATE" />Erlaubnis
Ashakirov
1
In einigen Fällen sollten Sie anstelle von Color.White das Hex-Farb-Argb-Format wie 0xffffffff verwenden, da die Wahrscheinlichkeit gering ist, dass Benutzergeräte Color (RGB) für einen ARGB-Parameter verwenden und Sie die falsche Farbe erhalten. Das ist bei mir passiert.
Beto Caldas
55
Die Vibration hat jetzt eine Verzögerung von 1000 ms. Wenn Sie den ersten auf 0 setzen, wird er sofort ausgelöst. Es ist ein {Verzögerung, vibrieren, schlafen, vibrieren, schlafen} Muster.
Tom
11
Ich musste nicht <uses-permission android:name="android.permission.VIBRATE" />zur Arbeit hinzufügen .
Iqbal
1
Weiß jemand, wie man setSound auf API 26 verwendet?
Rodrigo Manguinho
61

Eine Erweiterung der Antwort von TeeTracker,

Um den Standard-Benachrichtigungston zu erhalten, können Sie wie folgt vorgehen

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

Dadurch erhalten Sie den Standard-Benachrichtigungston.

nikoo28
quelle
35

Benachrichtigung Vibrieren

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

Klang

mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);

für mehr Sound Option

Cristiana Chavez
quelle
2
Für die vibrierende, stellen Sie sicher, dass Sie die <uses-permission android:name="android.permission.VIBRATE" />in Ihrer AndroidManifest.xml
Aaron Esau
Wie lange dauert diese Vibration? oder vibriert es nur einmal?
Zapnologica
13

Es funktioniert gut für mich. Sie können es versuchen.

 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
quelle
10

Dies ist eine einfache Möglichkeit, Benachrichtigungen anzurufen, indem Sie die Standardeinstellung für Vibration und Sound vom System verwenden.

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

Fügen Sie die Vibrationsberechtigung hinzu, wenn Sie sie verwenden möchten:

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

Viel Glück,'.

Maher Abuthraa
quelle
Kann mir jemand sagen, warum Vibrationen nicht funktionieren, wenn das Telefon telefoniert? ODER können wir eine Benachrichtigung machen, um Vibrationen zu erzwingen, selbst wenn das Telefon
Es hat mir geholfen, notificationBuilder.setDefaults (notification.defaults);
Saveen
@ user526206, ich weiß es nicht. Das habe ich noch nie getestet. Sie können eine neue Frage öffnen, da dies nichts mit dem Benachrichtigungsverhalten zu tun hat.
Maher Abuthraa
7

Ich verwende den folgenden Code und er funktioniert gut für mich.

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
quelle
1

Für Kotlin können Sie dies versuchen.

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

// Benachrichtigungs-Audio einstellen

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

Um die SDK-Version> = 26 zu unterstützen, sollten Sie auch NotificationChanel erstellen und dort ein Vibrationsmuster und einen Sound festlegen. Es gibt ein Kotlin-Codebeispiel:

    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)
    }

Und das ist der Erbauer:

 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()
    }

Stellen Sie sicher, dass Sie AudioAttributesdas Recht haben, hier mehr zu lesen .

MeLine
quelle