Próbuję uzyskać domyślny alarm wibracyjny i dźwiękowy, gdy nadejdzie moje powiadomienie, ale jak dotąd nie mam szczęścia. Wyobrażam sobie, że ma to związek ze sposobem, w jaki ustawiam wartości domyślne, ale nie jestem pewien, jak to naprawić. jakieś pomysły?
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);
}
android.permission.VIBRATE
pliku AndroidManifest.xml.Odpowiedzi:
Niektóre fałszywe kody mogą ci pomóc.
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; }
Dodaj poniżej zezwolenie na wibracje w
AndroidManifest.xml
pliku<uses-permission android:name="android.permission.VIBRATE" />
źródło
vibrate
Funkcja +1 wymaga<uses-permission android:name="android.permission.VIBRATE" />
pozwolenia<uses-permission android:name="android.permission.VIBRATE" />
do pracy.Rozszerzenie odpowiedzi TeeTrackera,
aby uzyskać domyślny dźwięk powiadomienia, możesz wykonać następujące czynności
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);
To da ci domyślny dźwięk powiadomienia.
źródło
Powiadomienie Wibracje
mBuilder.setVibrate(new long[] { 1000, 1000});
Dźwięk
mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
dla większej opcji dźwięku
źródło
<uses-permission android:name="android.permission.VIBRATE" />
w pliku AndroidManifest.xmlDla mnie działa dobrze, możesz spróbować.
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()); }
źródło
Jest to prosty sposób powiadamiania o połączeniu przy użyciu domyślnych wibracji i dźwięku systemu.
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()); }
Dodaj uprawnienia do wibracji, jeśli zamierzasz z nich korzystać:
<uses-permission android:name="android.permission.VIBRATE"/>
Powodzenia,'.
źródło
Używam następującego kodu i działa dobrze dla mnie.
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."); }
źródło
// ustaw dźwięk powiadomienia
builder.setDefaults(Notification.DEFAULT_VIBRATE); //OR builder.setDefaults(Notification.DEFAULT_SOUND);
źródło
Dla Kotlina możesz spróbować tego.
var builder = NotificationCompat.Builder(this,CHANNEL_ID)<br/> .setVibrate(longArrayOf(1000, 1000, 1000, 1000, 1000))<br/> .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
źródło
Aby obsługiwać wersję SDK> = 26, powinieneś również zbudować NotificationChanel i ustawić tam wzór wibracji i dźwięk. Istnieje przykładowy kod 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) }
A to jest budowniczy:
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() }
Upewnij się, że
AudioAttributes
jesteś wybrany, aby przeczytać więcej tutaj .źródło