很久以前在google看到了一个好玩的示例
- 环境
- 虚拟机使用的API32
- minSdkVersion 30
以下展示这个示例最重要的功能弹出bubble气泡 MainActivity
class MainActivity : AppCompatActivity() {
private val NEW_MESSAGE = "new_message"
private val DEFATUL_ID = "default_shortCutId"
private val notificationManager: NotificationManager by lazy {
baseContext.getSystemService()!!
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setNotification()
updateShortCutInfo()
showNotification()
}
private fun updateShortCutInfo() {
val build = ShortcutInfoCompat.Builder(baseContext, DEFATUL_ID)
.setShortLabel("defaultActivity")
.setLongLived(true)
.setIntent(
Intent(baseContext, MainActivity::class.java)
.setAction(Intent.ACTION_VIEW),
)
.build()
ShortcutManagerCompat.pushDynamicShortcut(baseContext, build)
}
private fun showNotification() {
val user = Person.Builder().setName("user").build()
val messagingStyle = NotificationCompat.MessagingStyle(user)
val iconCompat =
IconCompat.createWithResource(baseContext, R.mipmap.ic_launcher_round)
val pendingIntent = PendingIntent.getActivity(baseContext,
2,
Intent(baseContext, BubbleActivity::class.java),
PendingIntent.FLAG_MUTABLE)
val builder = NotificationCompat.Builder(baseContext, NEW_MESSAGE).setBubbleMetadata(
NotificationCompat.BubbleMetadata.Builder(pendingIntent, iconCompat)
.setDesiredHeight(baseContext.resources.getDimensionPixelSize(R.dimen.bubble_height))
.setAutoExpandBubble(true)
.setSuppressNotification(true)
.build()
)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setShortcutId(DEFATUL_ID)
.setStyle(messagingStyle)
notificationManager.notify(1573, builder.build())
}
private fun setNotification() {
val notificationChannel =
NotificationChannel(NEW_MESSAGE, "new Message", NotificationManager.IMPORTANCE_HIGH)
notificationManager.createNotificationChannel(notificationChannel)
}
}
被打开的气泡activity 气泡内部什么代码都没有布局就是简简单单的一个textview
class BubbleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bubble)
}
}
<!--气泡activity必须设置
documentLaunchMode(将有此活动的多个实例。)
resizeableActivity(扩展的气泡由系统 UI 调整大小)
allowEmbedded(扩展的气泡嵌入在系统UI中)-->
<activity
android:name=".BubbleActivity"
android:allowEmbedded="true"
android:documentLaunchMode="always"
android:exported="true"
android:resizeableActivity="true" />
ok运行