투케이2K

757. (Android/Java) 실시간 클립 보드 내용 변경 상태 감지 - ClipboardManager.OnPrimaryClipChangedListener 본문

Android

757. (Android/Java) 실시간 클립 보드 내용 변경 상태 감지 - ClipboardManager.OnPrimaryClipChangedListener

투케이2K 2024. 4. 1. 19:47

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[호출 : 소스 코드]

        // ---------------------------------------------------------------
        // [로직 처리 실시]
        // ---------------------------------------------------------------
        try {

            // [핸들러 작업 예약] : [클립 보드 저장]
            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                @Override
                public void run() {

                     // [클립 보드 내용 저장]
                     C_App.setClipboard(A_Intro.this, "반갑 습니다 . 투케이 입니다");

                }
            }, 10000);

        }
        catch (Exception e){
            e.printStackTrace();
        }
 

[서비스 : 소스 코드]

package com.example.javaproject;

import android.app.Service;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class S_ClipBoardChangeService extends Service implements ClipboardManager.OnPrimaryClipChangedListener {


    /**
     * // --------------------------------------------------------------------------------------
     * TODO [클래스 설명]
     * // --------------------------------------------------------------------------------------
     * 1. 휴대폰 클립 보드 내용 변경 감지 서비스
     * // --------------------------------------------------------------------------------------
     * 2. 적용 방법 [1] : AndroidManifest.xml 에서 서비스 적용 실시 [application 내부에 서비스 선언]
     *
     *    <service
     *        android:name=".S_ClipBoardChangeService"
     *        android:exported="true" />
     *
     * // --------------------------------------------------------------------------------------
     * 3. 적용 방법 [2] : 최상위 클래스에서 startService 호출 TODO [onCreate 내부에 시작 시 호출]
     *
     *    try {
     *        startService(new Intent(getApplication(), S_ClipBoardChangeService.class));
     *    }
     *    catch (Exception e){
     *        e.printStackTrace();
     *    }
     *
     * // --------------------------------------------------------------------------------------
     * 4. 클립 보드 데이터 저장 방법 :
     *
     * ClipboardManager clipboardManager = (ClipboardManager) mContext.getSystemService(CLIPBOARD_SERVICE);
     * ClipData clipData = ClipData.newPlainText("copy", data); //TODO 클립보드에 copy 라는 이름표로 데이터를 복사하여 저장
     * clipboardManager.setPrimaryClip(clipData);
     *
     * // --------------------------------------------------------------------------------------
     * */





    /**
     * // --------------------------------------------------------------------------------------
     * // TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // --------------------------------------------------------------------------------------
     * // [SEARCH FAST] :
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     *
     * // --------------------------------------------------------------------------------------
     */





    // -----------------------------------------------------------------------------------------
    // TODO [클래스 명칭 선언 실시]
    // -----------------------------------------------------------------------------------------
    private static final String ACTIVITY_NAME = "S_ClipBoardChangeService";





    // -----------------------------------------------------------------------------------------
    // TODO [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    ClipboardManager mManager;





    // -----------------------------------------------------------------------------------------
    // TODO [onCreate : 서비스 시작 수행]
    // -----------------------------------------------------------------------------------------
    @Override
    public void onCreate() {
        super.onCreate();
        // ===============================================================
        S_Log._W_(S_FinalMsg.LOG_Service_onStartCommand, new String[]{ S_FinalMsg.LOG_NOW() });
        // ===============================================================

        mManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

        // [리스너 등록]
        mManager.addPrimaryClipChangedListener(this);
    }





    // -----------------------------------------------------------------------------------------
    // TODO [onDestroy : 서비스 종료 수행]
    // -----------------------------------------------------------------------------------------
    @Override
    public void onDestroy() {
        super.onDestroy();
        // ===============================================================
        S_Log._E_(S_FinalMsg.LOG_Service_onTaskRemoved, new String[]{ S_FinalMsg.LOG_NOW() });
        // ===============================================================

        // [리스너 해제]
        try {

            if (mManager != null){
                mManager.removePrimaryClipChangedListener(this);
                mManager = null;
            }
        }
        catch (Exception ex){
            ex.printStackTrace();
        }
    }





    // -----------------------------------------------------------------------------------------
    // TODO [onBind 서비스 실행 부분 : bindService() 로 바인딩을 실행할 때 호출]
    // -----------------------------------------------------------------------------------------
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }





    // -----------------------------------------------------------------------------------------
    // TODO [onPrimaryClipChanged : 클립 보드 변경 상태 감지]
    // -----------------------------------------------------------------------------------------
    @Override
    public void onPrimaryClipChanged() {
        try {
            if (mManager != null && mManager.getPrimaryClip() != null) {

                ClipData data = mManager.getPrimaryClip();

                // [클립 보드 데이터 확인]
                if (data != null && data.getItemCount() > 0){
                    int dataCount = data.getItemCount();

                    for (int i = 0 ; i < dataCount ; i++) {
                        S_Log._W_(ACTIVITY_NAME + " : onPrimaryClipChanged : 클립 보드 변경 상태 감지", new String[]{String.valueOf(data.getItemAt(i).coerceToText(this))});
                    }
                }

            } 
        }
        catch (Exception e){
            e.printStackTrace();
        }

    }


} // TODO [클래스 종료]
 

[결과 출력]

 

W///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.S_ClipBoardChangeService.onPrimaryClipChanged(S_ClipBoardChangeService.java:156)]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2024-04-01 16:17:45 월요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: S_ClipBoardChangeService : onPrimaryClipChanged : 클립 보드 변경 상태 감지]
I/: ----------------------------------------------------
I/: [LOG :: 반갑 습니다 . 투케이 입니다]
W///===========//: ================================================

 

반응형
Comments