1.메니페스트에 서비스 선언
<service android:name=".NotificationListener" android:exported="true"
android:label="My Notification Listener"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
2. 메인에서 시스템 권한 요청
if (!permissionGrantred()) {
Intent gt= new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(gt);
}
private boolean permissionGrantred() {
Set<String> sets = NotificationManagerCompat.getEnabledListenerPackages(this);
if (sets != null && sets.contains(getPackageName())) {
return true;
} else {
return false;
}
}
3.서비스 구현
- com.android.messaging: 이 패키지명은 Google의 Android Messages 앱에 해당합니다. 이 앱은 일부 Android 디바이스에서 기본 문자 메시징 앱으로 제공됩니다.
- com.samsung.android.messaging: 삼성 디바이스에서는 Samsung Messages 앱이 기본 문자 메시징 앱으로 제공되며, 패키지명은 이와 같습니다.
- com.lge.message: LG 디바이스에서는 LG 메시지 앱이 기본 문자 메시징 앱으로 사용되며, 패키지명은 위와 같습니다.
- com.htc.sense.messaging: HTC 디바이스에서는 HTC Sense의 일부로 제공되는 문자 메시징 앱의 패키지명입니다.
- com.motorola.messaging: 몇몇 모토로라 디바이스에서는 Motorola의 문자 메시징 앱이 사용되며, 패키지명은 위와 같습니다.
public class NotificationListener extends NotificationListenerService {
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
super.onNotificationRemoved(sbn);
Log.d(TAG, "onNotificationRemoved ~ " +
" packageName: " + sbn.getPackageName() +
" id: " + sbn.getId());
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
super.onNotificationPosted(sbn);
Bundle extras = sbn.getNotification().extras;
CharSequence title = "";
if (extras.getCharSequence(Notification.EXTRA_TITLE) == null) {
title = "";
} else {
title = extras.getCharSequence(Notification.EXTRA_TITLE);
}
CharSequence text = "";
if (extras.getCharSequence(Notification.EXTRA_TEXT) == null) {
text = "";
} else {
text = extras.getCharSequence(Notification.EXTRA_TEXT);
}
//KT일때 문자(com.samsung.android.messaging) , LG일때 (com.android.cellbroadcastreceiver)
if (sbn.getPackageName().equals("com.samsung.android.messaging") || sbn.getPackageName().equals("com.android.cellbroadcastreceiver")
|| sbn.getPackageName().equals("com.android.messaging") || sbn.getPackageName().equals("com.lge.message")
|| sbn.getPackageName().equals("com.htc.sense.messaging") || sbn.getPackageName().equals("com.motorola.messaging")) {
Log.d("myLog", "pac name " + sbn.getPackageName());
Log.d("myLog", "title " + title);
Log.d("myLog", "text " + text);
}else{
if (sbn.getPackageName().equals("com.kakao.talk")){ //카카오톡일때
}
}
}
'안드로이드' 카테고리의 다른 글
안드로이드 다른앱 위에 그리기(노티알림) (0) | 2024.01.23 |
---|---|
WorkerManager android java (0) | 2024.01.17 |
Android Java 갤러리 다중이미지 가져와서 연속크랍(Crop) (0) | 2024.01.12 |
PDF 파일 불러와서 Sign하기(JAVA) (0) | 2024.01.08 |
이미지 공유시 Uri 얻기 (0) | 2023.12.14 |