Kotlin

[android : kotlin] 코틀린 Notification setShowActionsInCompactView 사용 예제 : MediaStyle

미디어 스타일 설정시 setShowActionsInCompactView에 대해 알아본다.  미디어 스타일(MediaStyle) 사용시 setShowActionsInCompactView에 대한 값을 설정해야한다.  setShowActionsInCompactView는 Notification이 접혔을 때 보여질 addAcion의 아이콘을 설정하는 것이다. 기준은 addAcion이 된다. addAction이 5개라고 했을 때 

setShowActionsInCompactView(0,1,2,3,4) 로 설정할 수 있다. 인덱스 값은 0부터 시작된다. 이렇게 설정하면 Notification이 무조건 펼쳐진 상태로 노출된다. 감춰야할 버튼이 없기 때문이다.  setShowActionsInCompactView(0,1,2) 으로 설정하게되면 Notification이 접혔을 때 보여질 버튼이 3개만 보여지게되는 것이다.  아래 노티가 펼쳐졌을때와 접혔을때를 참고 하면 이해가 될 것이다.

 


출처: 안드로이드 개발자 문서 : 미디어 컨트롤로 알림 만들기

 

 

Notification에 보여질 아이콘을 추가하기 위해 addAction()사용하여 추가해보자. 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
	val builder = NotificationCompat.Builder(this, CHANNEL_ID)
	.setContentTitle(description.title)
	.setContentText(description.subtitle)
	.setSubText(description.description)

	// Show controls on lock screen even when user hides sensitive content.
	.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
	.setAutoCancel(false) 
	//.setWhen(System.currentTimeMillis()) 
	.setContentIntent(controller.sessionActivity)
	.setSmallIcon(R.mipmap.ic_launcher_round)

	.setLargeIcon(description.iconBitmap)

	.setDeleteIntent(
		MediaButtonReceiver.buildMediaButtonPendingIntent(
			this,
			PlaybackStateCompat.ACTION_STOP
		)
	)

	//.setWhen(System.currentTimeMillis())

	.setStyle(
		androidx.media.app.NotificationCompat.MediaStyle()
			.setMediaSession(sessionToken)
			.setShowActionsInCompactView(
				0,
				1,
				2
			)
			.setShowCancelButton(true)
			.setCancelButtonIntent(
				MediaButtonReceiver.buildMediaButtonPendingIntent(
					this, PlaybackStateCompat.ACTION_STOP
				)
			)
	)
	//.setColor(ContextCompat.getColor(this, R.color.colorAccent))

	.setShowWhen(false)
	.setPriority(NotificationCompat.PRIORITY_HIGH)
	.setOnlyAlertOnce(true)
	.setChannelId(CHANNEL_ID)
	.build()
}

 

아래 코드스니펫을 보자. Notificaiotn.action를 사용해서 PendingIntent를 설정해야한다.  

val previous =
	Notification.Action.Builder(
		R.drawable.baseline_skip_previous_24,
		getString(R.string.previous),
		MediaButtonReceiver.buildMediaButtonPendingIntent(
			this,
			PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
		)
	).build()
    
    
val next =
	Notification.Action.Builder(
		R.drawable.baseline_skip_next_24,
		getString(R.string.next),
		MediaButtonReceiver.buildMediaButtonPendingIntent(
			this,
			PlaybackStateCompat.ACTION_SKIP_TO_NEXT
		)
	).build()    
    

lateinit var playpause: Notification.Action


if(playbackState == PlaybackStateCompat.STATE_PLAYING) {

	playpause =
		Notification.Action.Builder(
			R.drawable.baseline_pause_circle_outline_24,
			getString(R.string.pause),
			MediaButtonReceiver.buildMediaButtonPendingIntent(
				this,
				PlaybackStateCompat.ACTION_PLAY_PAUSE
			)
		).build()

} else {

	playpause =
		Notification.Action.Builder(
			R.drawable.baseline_play_circle_outline_24,
			getString(R.string.play),
			MediaButtonReceiver.buildMediaButtonPendingIntent(
				this,
				PlaybackStateCompat.ACTION_PLAY_PAUSE
			)
		).build()
}

actions 배열을 초기화 후 각각 인덱스 번호를 지정 후 배열에 넣어주자.

//var btnActions: Array<Notification.Action> = emptyArray<Notification.Action>()
var btnActions: Array<Notification.Action?> = arrayOfNulls<Notification.Action>(3)
btnActions[0] = previous
btnActions[1] = playpause
btnActions[2] = next

builder.actions = btnActions

 

[build.gradle(:app)] 

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29

    defaultConfig {
        applicationId "edu.kotlin.study"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

[REFERENCE]

stackoverflow.com/questions/35647821/android-notification-addaction-deprecated-in-api-23

미디어 컨트롤로 알림 만들기

 

[연관 글 더보기]

[프로그래밍/Kotlin] – [android : kotlin] 코틀린 Notification addAction 추가하는 방법 : Notification.Action.Builder

[프로그래밍/Kotlin] – [android : kotlin] 코틀린 Notification 사용 예제

[프로그래밍/Android] – 잠금화면에 알림내용(NotificationCompat) 노출하기 (to show content in lock screen

 

Leave a Reply

error: Content is protected !!