我正试图展示通知型单挑,但我不能。我尝试了什么
final Notification.Builder notif = new Builder(getApplicationContext())
.setContentTitle(getString(R.string.title))
.setContentText(getString(R.string.text))
// .setTicker(getString(R.string.tick)) removed, seems to not show at all
// .setWhen(System.currentTimeMillis()) removed, match default
// .setContentIntent(contentIntent) removed, I don't neet it
.setColor(Color.parseColor(getString(R.color.yellow))) //ok
.setSmallIcon(R.drawable.ic_small) //ok
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
// .setCategory(Notification.CATEGORY_CALL) does not seem to make a difference
.setPriority(Notification.PRIORITY_MAX); //does not seem to make a difference
// .setVisibility(Notification.VISIBILITY_PRIVATE); //does not seem to make a difference
mNotificationManager.notify(Constants.NOTIFICATION_ID, notif.build());
通知仅显示为栏中的图标。
我在API 21模拟器上使用API 21(不是L预览版)
我试过了:
android:Theme.Holo.NoActionBar
,
android:Theme.Holo.NoActionBar.Fullscreen
和NotificationCompat.Builder
SDK示例不可用。有谁知道怎么做?
我通过添加以下内容使其成功:
.setDefaults(Notification.DEFAULT_VIBRATE)
这是最好的方法吗?
答案 0 :(得分:82)
根据Notifications,您需要设置振动或铃声以使单挑工作。但是,这是一个快速入侵,不需要VIBRATE权限来生成平视通知:
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]);
编辑:
不要滥用抬头通知。有关何时使用抬头通知,请参阅here:
MAX:用于关键和紧急通知,提醒用户注意时间要求严格的条件,或者在继续执行特定任务之前需要解决的问题。
HIGH:主要用于重要的通信,例如消息或聊天事件,其内容对用户特别有用。高优先级通知会触发抬头通知显示。
答案 1 :(得分:15)
根据Google的说法: https://developer.android.com/design/patterns/notifications.html
如果通知的优先级被标记为高,最高或全屏,则会收到抬头通知。
因此,以下代码应生成抬头通知:
.setPriority(Notification.PRIORITY_MAX)
应该够了。但显然还必须设置.setDefaults(Notification.DEFAULT_VIBRATE)。希望Google能够在Android 5.0的最终版本中修复此问题。
不确定是否有错误或功能......
答案 2 :(得分:8)
我的所有应用都没有显示通知,例如我有一个带有Android 5.1.1的Nexus 6,但我认为这是自Android 5.0以来的一个问题,我必须设置:
.setPriority(Notification.PRIORITY_HIGH)
正确设置和管理通知优先级
Android支持通知的优先级标志。此标记允许您相对于其他通知影响通知的显示位置,并有助于确保用户始终首先看到最重要的通知。发布通知时,您可以从以下优先级中进行选择:
MAX 用于关键和紧急通知,提醒用户注意时间紧迫或需要先解决的情况 他们可以继续完成一项特定任务。
HIGH 主要用于重要的通信,例如消息或聊天事件,其内容对于 用户。高优先级通知会触发抬头通知 显示。
DEFAULT 用于所有不属于此处所述的任何其他优先级的通知,如果应用程序没有 优先考虑自己的通知
LOW 用于您希望用户收到通知但不太紧急的通知。低优先级通知倾向于 显示在列表的底部,这使它们成为一个不错的选择 公共或无向社交更新等内容:用户要求 被通知他们,但这些通知应该永远不会 优先于紧急或直接沟通。
MIN 用于上下文或背景信息,例如天气信息或上下文位置信息。最低优先 通知不会出现在状态栏中。用户发现它们 扩大通知阴影。
答案 3 :(得分:5)
要设置priority,请使用setPriority功能(在API 16中引入)以及setDefaults的Notification Builder(在API 11中添加)。根据您的应用需求选择优先级DEFAULT,HIGH,LOW,MAX,MIN。也可以选择默认值here。
一个小片段:
$("table tr").each(function(){
var tdFirstval=$(this).find("td:first").html();
var val=$(this).find("td:last").html();
//floor area td value
if(tdFirstval=="floor area"){
console.log("Floor Area TD Value: "+val);
}
else
{
console.log((val);
}
});
答案 4 :(得分:1)
应设置高优先级并使用铃声或振动。
notificationBuilder.setDefaults(Notification.DEFAULT_ALL);
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
参考:https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up
单挑通知
使用Android 5.0(API级别21),通知可以显示为小型 设备时浮动窗口(也称为抬头通知) 处于活动状态(即设备已解锁且其屏幕已打开)。 这些通知看起来类似于您的紧凑形式 通知,但提前通知也显示行动 纽扣。用户可以在没有的情况下采取或解除提前通知 离开当前的应用程序。
可能触发单挑通知的条件示例 包括:
- 用户的活动处于全屏模式(应用使用fullScreenIntent)或
- 通知具有高优先级并使用铃声或振动
答案 5 :(得分:1)
请检查您的手机是否未处于“静音”或“请勿打扰”模式。我花了一天才找到它。对于那些遇到相同问题并发现此问题的人,我只发表评论。
答案 6 :(得分:0)
在您的代码中添加此行以显示抬头通知,它仅适用于Lollipop版本
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
答案 7 :(得分:0)
对于运行Android 8.0(API级别26)及更高级别的设备,通知渠道需要高度重要性
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="2"
>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Button A"
/>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Button B"
/>
</LinearLayout>
答案 8 :(得分:0)
您无需设置振动。您只需要设置声音即可。不太麻烦。我没有任何声音,但通知显示在顶部。确保使用PRIORITY_HIGH和DEFAULT_SOUND。
NotificationChannel channel = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
channel = new NotificationChannel("my_channel_01",
"Channel human readable title",
NotificationManager.IMPORTANCE_HIGH);
mNotificationManager.createNotificationChannel(channel);
}
Notification notification =
new NotificationCompat.Builder(this, "notify_001")
.setSmallIcon(R.drawable.ic_check)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setPriority(Notification.PRIORITY_HIGH)
.setDefaults(NotificationCompat.DEFAULT_SOUND)
.setChannelId("my_channel_01").build();
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, notification);