創建Notifation通知(黑馬程序員小結)
- 新建notifationManager類對象,getSystemService的通知欄服務
- 構建通知Notification對象的內容,通過NotificationCompat(兼容)的builder(context)方法,set5個參數,分別是標題(Title)內容(Text),時間(When),小圖標和大圖標,補充如果想設置右滑隱藏setOngoing(true)即可。
- 最後通過manager對象的notify(1,通知對象)和cancel(1)//這裏的1是id就行了
- 處理點擊事件,在2)中追加setContentIntent(寫個方法獲取PendIntent)構建延時意圖
1)獲取方法,new一個對象是不行的,有三種getActivity,getbroadcast,getservice類型,最終通過intent意圖對象,這裏進入主界面getAC 即可
2)getAc中4個參數,參數一:context傳this 參數二:請求碼 參數三:intent 參數4:flag:例如FLAG_UPDATE_CURENT有新通知會同步更新
3)增加intent詳細內容
- 修改原生通知爲自定義通知
package com.itheima.notification
import android.app.Notification
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.os.Bundle
import android.support.v4.app.NotificationCompat
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.RemoteViews
import android.widget.Toast
class MainActivity : AppCompatActivity() {
var manager:NotificationManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val args = intent.getStringExtra("args")
args?.let {
Toast.makeText(this,args,Toast.LENGTH_SHORT).show();
}
}
fun show(view: View) {
manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager?.notify(1,getNotification())
}
private fun getNotification(): Notification? {
val bitmap = BitmapFactory.decodeResource(resources,R.mipmap.ic_launcher)
val notification = NotificationCompat.Builder(this)
.setTicker("正在播放歌曲給過去三月的你")
.setSmallIcon(R.mipmap.ic_launcher)
.setCustomContentView(getRemoteViews())
.setWhen(System.currentTimeMillis())
.setOngoing(true)
.setContentIntent(getPendingIntent())
.build()
return notification
}
private fun getRemoteViews(): RemoteViews? {
val remoteViews = RemoteViews(packageName,R.layout.notification)
remoteViews.setTextViewText(R.id.title,"給過去三月的你")
remoteViews.setTextViewText(R.id.artist,"初音")
remoteViews.setOnClickPendingIntent(R.id.pre,getPrePendingIntent())
remoteViews.setOnClickPendingIntent(R.id.state,getStatePendingIntent())
remoteViews.setOnClickPendingIntent(R.id.next,getNextPendingIntent())
return remoteViews
}
private fun getNextPendingIntent(): PendingIntent? {
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("args","從通知欄下一曲點擊進來")
val pendingIntent = PendingIntent.getActivity(this,2,intent,PendingIntent.FLAG_UPDATE_CURRENT)
return pendingIntent
}
private fun getStatePendingIntent(): PendingIntent? {
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("args","從通知欄播放和暫停點擊進來")
val pendingIntent = PendingIntent.getActivity(this,3,intent,PendingIntent.FLAG_UPDATE_CURRENT)
return pendingIntent
}
private fun getPrePendingIntent(): PendingIntent? {
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("args","從通知欄上一曲點擊進來")
val pendingIntent = PendingIntent.getActivity(this,4,intent,PendingIntent.FLAG_UPDATE_CURRENT)
return pendingIntent
}
private fun getPendingIntent(): PendingIntent? {
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("args","從通知欄主體點擊進來")
val pendingIntent = PendingIntent.getActivity(this,1,intent,PendingIntent.FLAG_UPDATE_CURRENT)
return pendingIntent
}
fun hide(view: View) {
manager?.cancel(1)
}
}