Notice
Recent Posts
Recent Comments
Link
투케이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///===========//: ================================================
반응형
'Android' 카테고리의 다른 글
Comments