Notice
Recent Posts
Recent Comments
Link
투케이2K
466. (kotlin/코틀린) 실시간 클립 보드 내용 변경 상태 감지 - ClipboardManager.OnPrimaryClipChangedListener 본문
Kotlin
466. (kotlin/코틀린) 실시간 클립 보드 내용 변경 상태 감지 - ClipboardManager.OnPrimaryClipChangedListener
투케이2K 2024. 4. 1. 19:50[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Kotlin
[소스 코드]
package com.example.kotlinproject
import android.app.Service
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.os.IBinder
class S_ClipBoardChangeService : Service(), ClipboardManager.OnPrimaryClipChangedListener {
/**
* // --------------------------------------------------------------------------------------
* TODO [클래스 설명]
* // --------------------------------------------------------------------------------------
* 1. 휴대폰 클립 보드 내용 변경 감지 서비스
* // --------------------------------------------------------------------------------------
* 2. 적용 방법 [1] : AndroidManifest.xml 에서 서비스 적용 실시 [application 내부에 서비스 선언]
*
* <service
* android:name=".S_ClipBoardChangeService"
* android:exported="true" />
*
* // --------------------------------------------------------------------------------------
* 3. 적용 방법 [2] : 최상위 클래스에서 startService 호출 TODO [onCreate 내부에 시작 시 호출]
*
* // TODO [사용자가 최근 앱 작업 목록에서 지우기 및 날림 감지]
* try {
* startService(Intent(applicationContext, S_ClipBoardChangeService :: class.java))
* }
* catch (e: Exception){
* e.printStackTrace()
* }
*
* // --------------------------------------------------------------------------------------
* */
/**
* // --------------------------------------------------------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // --------------------------------------------------------------------------------------
* // [SEARCH FAST] :
* // --------------------------------------------------------------------------------------
*/
// --------------------------------------------------------------------------------------
// TODO [companion object >> static 선언 실시]
// --------------------------------------------------------------------------------------
companion object {
// TODO [클래스 명칭 선언 실시]
private const val ACTIVITY_NAME = "S_ClipBoardChangeService"
}
// --------------------------------------------------------------------------------------
// TODO [전역 변수 선언]
// --------------------------------------------------------------------------------------
private lateinit var mManager: ClipboardManager
// -----------------------------------------------------------------------------------------
// TODO [onCreate : 서비스 시작 수행]
// -----------------------------------------------------------------------------------------
override fun onCreate() {
super.onCreate()
// ===============================================================
S_Log._W_(S_FinalMsg.LOG_Service_onStartCommand, arrayOf(S_FinalMsg.LOG_NOW()))
// ===============================================================
mManager = getSystemService (Context.CLIPBOARD_SERVICE) as ClipboardManager
mManager.addPrimaryClipChangedListener(this)
}
// -----------------------------------------------------------------------------------------
// TODO [onDestroy : 서비스 종료 수행]
// -----------------------------------------------------------------------------------------
override fun onDestroy() {
super.onDestroy()
// ===============================================================
S_Log._E_(S_FinalMsg.LOG_Service_onTaskRemoved, arrayOf(S_FinalMsg.LOG_NOW()))
// ===============================================================
// [리스너 해제]
try {
if (mManager != null) {
mManager.removePrimaryClipChangedListener(this)
}
} catch (ex: Exception) {
ex.printStackTrace()
}
}
// -----------------------------------------------------------------------------------------
// TODO [onPrimaryClipChanged : 클립 보드 변경 상태 감지]
// -----------------------------------------------------------------------------------------
override fun onPrimaryClipChanged() {
try {
if (mManager != null && mManager.primaryClip != null) {
val data = mManager.primaryClip
// [클립 보드 데이터 확인]
if (data != null && data.itemCount > 0) {
val dataCount = data.itemCount
for (i in 0 until dataCount) {
S_Log._W_(ACTIVITY_NAME + " : onPrimaryClipChanged : 클립 보드 변경 상태 감지", arrayOf(data.getItemAt(i).coerceToText(this).toString()))
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
// -----------------------------------------------------------------------------------------
// TODO [onBind 서비스 실행 부분 : bindService() 로 바인딩을 실행할 때 호출]
// -----------------------------------------------------------------------------------------
override fun onBind(intent: Intent): IBinder {
throw UnsupportedOperationException("Not yet implemented")
}
} // TODO [클래스 종료]
반응형
'Kotlin' 카테고리의 다른 글
Comments