我最近开始编写我的第一个包含通知的android项目的代码。我正在编写SDK 21(Android 5.0)。
当前,我通过单击应用程序中的按钮来发送通知,稍后将通过服务器端脚本来完成。在实际的主体下面,应该有一个动作按钮,当我单击它而不是打开应用程序时,该按钮会执行操作。
我还想自定义通知的行为(当通知出现时),因此将播放自定义声音,并且设备会有条件地振动。为此,我使用NotificationCompat.Builder
创建通知并设置其属性:
private void sendNotification() {
String title = noteTitleEditText.getText().toString();
String text = noteBodyEditText.getText().toString();
Intent activityIntent = new Intent(this.getContext(), MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this.getContext(), REQUEST_CODE, activityIntent, PendingIntent.FLAG_ONE_SHOT);
Intent broadcastIntent = new Intent(this.getContext, MyNotificationReceiver);
broadcastIntent.putExtra("intent_key", "Action has been triggered");
PendingIntent actionIntent = PendingIntent.getBroadcast(this.getContext, REQUEST_CODE, broadcastIntent, PendingIntent.FLAG_ONE_SHOT);
Notification note = new NotificationCompat.Builder(this.getContext(), getString(R.string.channel_id))
.setSmallIcon(R.mipmap.icon)
.setContentTitle(title)
.setContentText(text)
.setSound(SettingsHandler.getRingtoneUri(this.getContext()))
.setVibrate(SettingsHandler.shouldVibrateOnPush(this.getContext()) ? new long[] {1000} : new long[] {0})
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.addAction(R.mipmap.another_icon, "Action", actionIntent)
.build();
NotificationManagerCompat manager = NotificationManagerCompat.from(this.getContext());
manager.notify(0, note);
}
SettingsHandler是一个帮助程序类,可提供用户选择的数据,例如应用程序应振动还是应播放哪种声音。
getRingtoneUri
返回一个Uri:
public synchronized static Uri getRingtoneUri(Context context) {
SharedPreferences prefs = context.getSharedPreferences(context.getString(R.string.key), Context.MODE_PRIVATE);
return Uri.parse(prefs.getString(context.getString(R.string.ringtone_uri), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION).toString()));
}
测试时,它会返回类似"content://media/internal/audio/media/31"
shouldVibrateOnPush
返回一个布尔值,该布尔值指示设备是否应该振动。
但是,调试控制台说声音和振动模式仍然为空。有人知道我在做什么错吗?谢谢。