2010-07-21 2 views
17

Ich habe eine Anwendung erstellt, die Benachrichtigungen erstellt, mit dem folgenden Code:Wie kann ich Vibration und Lichter mithilfe der Android-Benachrichtigungen API aktivieren?

// notification 
Notification notification = new Notification(R.drawable.notification_icon, title, System.currentTimeMillis()); 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 

// parameters 
String ringtone = prefs.getString(context.getString(R.string.key_notifications_ringtone), ""); 
if (ringtone.length() > 0) { 
    notification.sound = Uri.parse(ringtone); 
    notification.audioStreamType = AudioManager.STREAM_NOTIFICATION; 
} 

boolean useVibrator = prefs.getBoolean(context.getString(R.string.key_notifications_use_vibrator), false); 
if (useVibrator) { 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
} 

boolean useLed = prefs.getBoolean(context.getString(R.string.key_notifications_use_led), false); 
if (useLed) { 
    notification.defaults |= Notification.DEFAULT_LIGHTS; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
} 

// alert 
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.notification); 
contentView.setImageViewResource(R.id.notification_icon, R.drawable.icon); 
contentView.setTextViewText(R.id.notification_title, title); 
contentView.setTextViewText(R.id.notification_text, text); 
notification.contentView = contentView; 

Intent notificationIntent = new Intent(context, MyActivity.class); 

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
notification.contentIntent = contentIntent; 

notificationManager.notify(1, notification); 

Die Benachrichtigung funktioniert und die richtigen Klingelton verwendet werden.

Obwohl die Einstellungen korrekt aktiviert sind und die Benachrichtigungsflags korrekt gesetzt sind (ich habe das Debuggen überprüft), vibriert die Benachrichtigung niemals und bewirkt nie, dass die Lichter aktiviert werden.

Ich hätte die Einstellungen meines Telefons verantwortlich gemacht, aber jede andere App, die Benachrichtigungen verwendet, wie Messaging, Google Mail und andere, verwenden alle diese Funktionen korrekt.

Darf jemand wissen, was ich falsch gemacht habe? (Mein Telefon ist ein HTC Hero mit Android 2,1)

+0

Haben Sie die Vibrationserlaubnis? – Sephy

+0

Ich testete Ihren Code auf meinem Nexus One, mit der Erlaubnis, und ich bekomme die Vibration, aber nicht die LED ... immer noch graben – Sephy

+0

gleiche Sache, ich hatte die Schwingung Erlaubnis verpasst, und jetzt dieser Teil funktioniert. – SirDarius

Antwort

28

hinzufügen Erlaubnis Ihre Manifest-Datei

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

EDIT

für Lichter Versuchen Sie, sie explizit, könnte der Standard-Licht konfiguriert werden, dass sie Nolight

notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
notification.ledARGB = 0xff00ff00; 
notification.ledOnMS = 300; 
notification.ledOffMS = 1000; 
+0

Ich schlug das auch vor, aber nach ein bisschen Nachdenken, das kann es nicht sein. Wenn Sie keine Erlaubnis haben, stürzt die Anwendung ab, nicht wahr? also hätte er den Rest nicht funktionieren sehen. – Sephy

+0

das dachte ich auch, eine fehlende Erlaubnis hätte eine Ausnahme auslösen sollen. – SirDarius

+0

, um meinen vorherigen Kommentar zu vervollständigen, fügte die fehlende Erlaubnis den Trick hinzu, aber immer noch keine Lichter, und ich fand keine spezifische Erlaubnis für diesen Zweck – SirDarius

14

Neben Pentium10 Antwort:

Setzen Sie Ihr Gerät in den Ruhezustand und die Lichter gehen an! ;)

+0

Hallo OneWorld, versuche den obigen Code und setze den Code note.defaults | = Notification.DEFAULT_SOUND; note.defaults | = Notification.DEFAULT_VIBRATE; Dadurch funktioniert das Vibrieren und der Ton, aber das Licht funktioniert nicht, auch wenn ich mein Gerät in den Schlaf setze und das Licht erlischt. –

+1

Für jeden, der in der Zukunft darauf stößt, stellen Sie sicher, dass das Telefon ausgeschaltet ist, wie OneWorld sagte. Stellen Sie außerdem sicher, dass das Benachrichtigungsfeld nicht bereits ausgeblendet wurde (d. H. Der Benutzer hat die Benachrichtigung nicht angezeigt). Die LED blinkt nur in diesem Fall. – ashishduh

Verwandte Themen