这是我的代码,它只显示一个简单的通知,我怎么能让它也显示一个弹出或抬头通知。
抱歉,如果这是如此简单的帮助,如果你知道什么,
Notification.kt
`
package com.example.notifkos
import android.app.NotificationManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.core.app.NotificationCompat
const val notificationID = 1
const val channelID = "channel1"
const val titleExtra = "titleExtra"
const val messageExtra = "messageExtra"
class Notification : BroadcastReceiver()
{
override fun onReceive(context: Context, intent: Intent)
{
val importance = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
NotificationManager.IMPORTANCE_HIGH
} else {
TODO("VERSION.SDK_INT < N")
}
val notification = NotificationCompat.Builder(context, channelID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(intent.getStringExtra(titleExtra))
.setContentText(intent.getStringExtra(messageExtra))
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.build()
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.notify(notificationID, notification)
}
字符串
第一个月
package com.example.notifkos
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.app.*
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import com.example.notifkos.databinding.ActivityMainBinding
import java.util.*
class MainActivity : AppCompatActivity()
{
private lateinit var binding : ActivityMainBinding
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createNotificationChannel()
}
binding.submitButton.setOnClickListener { scheduleNotification() }
}
@RequiresApi(Build.VERSION_CODES.M)
private fun scheduleNotification()
{
val intent = Intent(applicationContext, Notification::class.java)
val title = binding.titleET.text.toString()
val message = binding.messageET.text.toString()
intent.putExtra(titleExtra, title)
intent.putExtra(messageExtra, message)
val pendingIntent = PendingIntent.getBroadcast(
applicationContext,
notificationID,
intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val time = getTime()
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
time,
pendingIntent
)
showAlert(time, title, message)
}
private fun showAlert(time: Long, title: String, message: String)
{
val importance = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
NotificationManager.IMPORTANCE_HIGH
} else {
TODO("VERSION.SDK_INT < N")
}
val date = Date(time)
val dateFormat = android.text.format.DateFormat.getLongDateFormat(applicationContext)
val timeFormat = android.text.format.DateFormat.getTimeFormat(applicationContext)
AlertDialog.Builder(this)
.setTitle("Notification Scheduled")
.setMessage(
"Title: " + title +
"\nMessage: " + message +
"\nAt: " + dateFormat.format(date) + " " + timeFormat.format(date))
.setPositiveButton("Okay"){_,_ ->}
.show()
}
@RequiresApi(Build.VERSION_CODES.M)
private fun getTime(): Long
{
val minute = binding.timePicker.minute
val hour = binding.timePicker.hour
val day = binding.datePicker.dayOfMonth
val month = binding.datePicker.month
val year = binding.datePicker.year
val calendar = Calendar.getInstance()
calendar.set(year, month, day, hour, minute)
return calendar.timeInMillis
}
@RequiresApi(Build.VERSION_CODES.O)
private fun createNotificationChannel()
{
val name = "Notif Channel"
val desc = "A Description of the Channel"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel(channelID, name, importance)
channel.description = desc
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
型
“好吧,那就再多加一些细节吧。比如,你想完成什么,你是怎么做的,你在这个方法上发现了什么困难,你尝试过的其他方法,等等。总之,没有代码不是一个好问题,只有代码也不是。寻找平衡点!
我什么都拿不到
我已经阅读了android stuio文档,所以请不要告诉我阅读,请
1条答案
按热度按时间kjthegm61#
在我看来,你没有根据你的需要创建你的通知渠道。
在函数
createNotificationChannel()
中,将通道的重要性设置为NotificationManager.IMPORTANCE_DEFAULT
在源代码中,它说:
默认通知重要性:到处显示,发出噪音,但不会在视觉上侵入。
如果将重要性设置为
NotificationManager.IMPORTANCE_HIGH
,您将获得想要的效果