일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 푸시 데이터 저장
- 안드로이드 에러
- NotificationService Extension
- Flutter UIKitView MethodChannel
- flutter rotate
- 노티피케이션 익스텐션
- 스위프트 웹뷰
- FlutterView MethodChannel
- Swift flutterviewcontroller
- 스위프트 푸시
- 스위프트 앨범
- swift 문자
- 앱 꺼졌을 때 푸시 데이터 저장
- 앱 백그라운드 푸시 데이터 저장
- 스위프트
- 안드로이드 숏컷
- swift autolayout
- 안드로이드 바로가기
- 스위프트 UserDefaults
- 스위프트 카메라
- native flutter view
- 플러터 뷰 컨트롤러
- swift sms
- 스위프트 테이블 뷰 셀
- flutter 회전
- Flutter NativeView
- 안드로이드 FCM
- Swift flutterview
- 안드로이드 앨범
- silent push
- Today
- Total
Things take time
[Android] 앱 아이콘에 뱃지(Badge) 표시하기 본문
[코드]
Intent badgeIntent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); badgeIntent.putExtra("badge_count", badgeCount); badgeIntent.putExtra("badge_count_package_name", getPackageName()); badgeIntent.putExtra("badge_count_class_name", getLauncherClassName()); sendBroadcast(badgeIntent);
카메라, 앨범을 호출하는 것처럼 상수 값인 인텐트 액션 값을 주면 된다.
여기서 badgeCount는 당연히 int값이며 getPackageName()은 현재 패키지명을 가져오는 함수.. 중요한 것은 세 번째의 클래스 이름인데, 여기에 들어가는 클래스 이름은 앱이 처음에 실행되는 액티비티 클래스의 이름이다.
만약 MainActivity.class가 첫 액티비티 클래스라면 그 이름을 써도 되는데, 나 같은 경우는 인트로 화면 전용 클래스를 따로 두고 일정 시간이 지나면 MainActivity로 이동하기 때문에 런처(처음 실행되는)화면을 구하는 함수를 구글링을 통해!
private String getLauncherClassName() { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); PackageManager pm = getApplicationContext().getPackageManager(); ListresolveInfos = pm.queryIntentActivities(intent, 0); for (ResolveInfo resolveInfo : resolveInfos) { String pkgName = resolveInfo.activityInfo.applicationInfo.packageName; if (pkgName.equalsIgnoreCase(getPackageName())) { return resolveInfo.activityInfo.name; } } return null; }
[넣을 위치는?]
위의 소스코드를 넣을 시점은 어디가 좋을까? 당연 푸시를 받는 시점이다.
FCM기준으로 두 개의 서비스를 상속받는 클래스 두 개를 생성하게 된다. 그 중 FirevaseMessagingService를 상속받는 클래스의 sendNotification 메소드 혹은 onMessageReceived 메소드에 구현하면 되겠다.
나 같은 경우, 푸시가 오면 뱃지 카운트를 +1로 해주는데.. 이 뱃지 카운트(BadgeCount 변수)는 푸시를 누르고 앱에 들어갔을 때 0으로 초기화 시켜줘야하므로.. 폰 DB중 SharedPreference에 저장했다. (SQLite에 저장하는 것은 사치다, 물론 테이블 구조로 만들어서 좀 더 세분화 하겠다면 써야한다)
그리고 앱이 실행되는 resume(create는 앱이 처음 실행될 때만 호출되므로 뱃지에는 사용하지 않는 것이 좋다)에서 뱃지 카운트를 검사하는 함수를 호출하여 해당 카운트 값이 0이상이라면 0으로 초기화하는 것으로 사용했다.
이렇게하면 다른 일반적인 앱들이 사용하는 방식, 앱으로 들어갔을 때 뱃지 카운트 0, 푸시가 오게 되면 ++가 되는 로직이 완성된다.
이제 여기에 좀 더 덧붙여서 푸시를 받기 설정에 따라 사전 작업들을 들어가야 할 것이다. 그것은 각 어플의 기획에 따라 진행하면 된다.
'Android(기능)' 카테고리의 다른 글
[Android] 뷰페이저를 이용한 앨범에서 여러 사진 불러오기 (7) | 2017.07.20 |
---|---|
[Android] 인텐트 필터, 커스텀 스키마, 그에 따른 액티비티 중복 제거 (0) | 2017.07.12 |
[Android] 하이브리드앱의 기본, 웹뷰 세팅과 자바스크립트 연동 방법 (6) | 2017.07.03 |
[Android] 웹뷰 내 스크롤로 새로고침 하기(화면 상단 스크롤 새로고침) (0) | 2017.07.02 |
[Android] 문자 수신 처리 (브로드캐스트 리시버, BroadcastReceiver) (2) | 2017.07.02 |