Android8.0 알림 표시줄 적합 - kotlin

6455 단어 Android
Google은 Android 8.0 시스템부터 공지 채널이라는 개념을 도입했습니다.통지 채널은 무엇입니까?말 그대로 모든 통지는 대응하는 경로에 속해야 한다.모든 앱은 현재 앱이 어떤 알림 채널을 가지고 있는지 자유롭게 만들 수 있지만 이런 알림 채널의 통제권은 모두 사용자에게 있다.사용자는 이 통지 채널의 중요도, 벨이 울릴지, 진동할지, 또는 이 채널을 닫을지 자유롭게 선택할 수 있다.
이러한 통제권을 가진 후에 사용자는 더 이상 쓰레기 전송 메시지의 방해를 두려워할 필요가 없다. 왜냐하면 사용자는 자신이 어떤 알림에 관심을 가지는지, 어떤 알림에 관심을 가지지 않는지 스스로 선택할 수 있기 때문이다.구체적인 예를 들어 나는 알리페이의 수금 정보를 즉시 받을 수 있기를 바란다. 왜냐하면 나는 어떤 수익도 놓치고 싶지 않기 때문이다. 그러나 알리페이가 나에게 추천한 주변 음식을 받고 싶지 않다. 왜냐하면 나는 돈이 없어서 회사 식당만 먹을 수 있기 때문이다.이런 상황에서 알리페이는 두 가지 통지 채널을 만들 수 있다. 하나는 수지, 하나는 추천이다. 그리고 나는 사용자로서 추천 유형의 통지에 관심이 없다. 그러면 나는 직접 추천 통지 채널을 닫을 수 있다. 이렇게 하면 내가 관심을 가지는 통지에 영향을 주지 않을 뿐만 아니라 내가 무관심한 통지로 나를 방해하지 않게 할 수 있다.
다음은 예입니다.
package com.example.notificationtest

import android.annotation.TargetApi
import android.app.NotificationManager
import android.content.Context
import android.graphics.BitmapFactory
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*
import android.app.NotificationChannel
import android.app.PendingIntent
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.provider.Settings
import android.support.v4.app.NotificationCompat
import android.widget.Toast


class MainActivity : AppCompatActivity(), View.OnClickListener {
    private val TAG = MainActivity::class.java.simpleName
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        send_notice.setOnClickListener(this)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//      API         26(8.0  )
            //       8.0              ,        
            var channelId = "chat"
            var channelName = "    "
            var importance = NotificationManager.IMPORTANCE_HIGH //      
            createNotificationChannel(channelId, channelName, importance)
            channelId = "subscribe"
            channelName = "    "
            importance = NotificationManager.IMPORTANCE_DEFAULT //      
            createNotificationChannel(channelId, channelName, importance)
        }
    }

    @TargetApi(Build.VERSION_CODES.O)//      API     Build.VERSION_CODES.O(26),       API  
    private fun createNotificationChannel(channelId: String, channelName: String, importance: Int) {
        //          ,       ,          ,              ,    APP     ,        。
        val channel = NotificationChannel(channelId, channelName, importance)
        channel.setShowBadge(true)//    

        //       
        channel.enableVibration(true)//    
        channel.vibrationPattern = longArrayOf(0, 1000, 1000, 1000, 1000, 1000, 1000, 1000)//      

        /*      ,   res   raw     msg.wav    ,           ,                ,
                    ,              ,    APP     ,        。*/
        //channel.setSound(Uri.parse("android.resource://$packageName/raw/msg"),null)//         ,        
        channel.setSound(Uri.parse("android.resource://$packageName/${R.raw.msg}"), null)//      

        //  LED (        ,       )
        channel.enableLights(true)//  LED 
        channel.lightColor = Color.GREEN//  LED   

        val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        manager.createNotificationChannel(channel)//      
    }

    override fun onClick(v: View) {
        when (v.id) {
            R.id.send_notice -> sendAChatMessage()
            else -> Log.d(TAG, "onClick:      view id")
        }
    }

    private fun sendAChatMessage() {
        val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = manager.getNotificationChannel("chat")//  chat    
            if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
                //     ,      
                Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).run {
                    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
                    putExtra(Settings.EXTRA_CHANNEL_ID, channel.id)
                    startActivity(this)
                    Toast.makeText(this@MainActivity, "        ", Toast.LENGTH_SHORT).show()
                }
            }
            /*                ,Android 8.0               ,            :
               val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
               manager.deleteNotificationChannel(channelId)
                              。  Google                   ,          
                           。
                        ,                         ,            。*/
        }
        //            
        val pendingIntent = Intent(this, NotificationActivity::class.java).run {
            PendingIntent.getActivity(this@MainActivity, 0, this, 0)
        }
        //  android8.0       ,       ,               。
        val notification = NotificationCompat.Builder(this, "chat")
            .setContentTitle("Android 8.0               ")
            .setStyle(//         ,              
                NotificationCompat.BigTextStyle().bigText(
                    "               。  Google    " +
                            "               ,                      。"
                )
            )
            .setStyle(//           ,            
                NotificationCompat.BigPictureStyle().bigPicture(
                    BitmapFactory.decodeResource(
                        resources,
                        R.drawable.timg
                    )
                )
            )
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher))
            .setNumber(2)//          
            .setContentIntent(pendingIntent) //         pendingIntent
            .setAutoCancel(true)//              
            .build()
        manager.notify(1, notification)
    }
}


더 많은 알림 표시줄 상세 정보는 참고: 안드로이드 알림 표시줄 팁, 8.0 시스템에서 알림 표시줄 어울림https://blog.csdn.net/guolin_blog/article/details/79854070(본문의 출처)
안드로이드 알림 표시줄 팁https://blog.csdn.net/guolin_blog/article/details/50945228

좋은 웹페이지 즐겨찾기