투케이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 [클래스 종료]

 

반응형
Comments