STEEM/SCT 보팅파워(VP) 안드로이드 위젯 #3 - Doze와 앱 대기(App Standby) 이야기

in #sct5 years ago (edited)

안녕하세요. 안피곤입니다.

사실 스팀 위젯에 기능을 업데이트를 할 계획은 없었습니다. 그런데 막상 구현하고 보니 욕심이 계속 생깁니다. 앱에 버그도 있고 기능도 거의 없는게 계속 마음에 걸리네요.

그리고 위젯 UI 디자인은 포기했습니다. 해상도, OS 버전, 시스템 폰트 크기와 글꼴에 영향을 많이 받습니다. 안드로이드 UI 개발은 경험이 없어서 매우 어렵습니다. ㅠㅠ

이번에 @griend96님이 제안하신 기능을 넣었습니다. 바탕화면에 위젯을 여러개 설치할 수 있습니다. 부 계정을 여러개 가지고 있는 스팀잇 사용자에게는 유용할 것 같습니다.


사용 예시

저는 완(WHAN)팀 멤버들을 바탕화면 위젯에 추가하여 모니터링(?) 하고 있습니다. 이제 완팀@griend96도 합류하셔서 이제 6명이 되었습니다. 축하해주세요. ㅋ




사용방법

사용 방법은 매우 간단합니다. 아래 순서만 지키면 누구나 쉽게 바탕화면에 위젯을 추가할 수 있습니다. 저는 매우 직관적이고 간단한 사용방법을 구현하기 위해서 항상 노력합니다.

1. 바탕화면에 위젯을 추가한다.2. 스팀잇 아이디를 입력하고 확인을 누른다.




Doze 모드와 앱 대기(App Standby) 모드 이야기

Android 6.0 마시멜로(API 레벨 23)부터 Doze 모드라는 게 존재합니다. 앱이 Doze 모드나 앱 대기 모드(App Standby)에 들어가게 되면 네트워크 엑세스, Wake Lock, SyncAdapter, JobScheduler, AlarmManager이 작동하지 않게됩니다.

"이 이유 때문에 위젯앱 설치하고 하루가 지나면 업데이트가 되지 않았던 것입니다."

하지만 충전 중일때는 두 모드에서 빠져나옵니다. 해당 모드는 배터리를 아낄수 있어서 사용자에게는 매우 좋습니다. 하지만 개발자에겐 헬입니다. ㅠㅠ

그리고 삼성 갤럭시폰에는 스마트매니저(Smart Manager) 라는 녀석도 있습니다. 스마트 매니저는 장기간 사용하지 않는 앱을 강제로 잠재워 버립니다. 자장~ 자장~

결국 저는 Doze, App Standby, Smart Manager에 항복했습니다. 해당 모드에서 빠져나가는 것은 코드 레벨에서 처리할 수 없다고 판단내렸습니다.

Background Service를 버리고 Foreground Service로 개발하였습니다. Foreground Service는 해당 모드 영향을 안받는다고 합니다. 대신 서비스 동작시 상태바에 노티 알람 발생합니다.

위 화면에서 보는 거와 같이 서비스가 동작 중일때는 상태바에 아이콘이 표시됩니다. 만약 노티에 아이콘이 오랫동안 보인다면 사용자가 강제로 종료시킬 수 있습니다.




*




노티 알람 발생시 진동과 소리를 없애기


노티 알람 발생시 진동과 소리를 없애려면 아래와 같이 설정하세요.

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "SteemWidget Service Channel", NotificationManager.IMPORTANCE_LOW);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setVibrate(null);
builder.setSound(null);
startForeground(1, builder.build());

Stack Overflow에서는 builder.setVibrate(null)builder.setSound(null) 적용하면 된다고 했습니다. 그런데 적용해도 진동과 소리가 발생합니다. 저는 채널에 NotificationManager.IMPORTANCE_LOW를 설정하니 진동과 소리가 나지 않습니다.




보팅 파워 계산 로직

안드로이드 Java 코드에서 보팅 파워는 다음과 같이 계산합니다. ISO 날짜 파싱을 위해서 SimpleDateFormat를 사용하였습니다.

private static final long VP_REGENERATION_SECS_STEEM = 432000;

    public static String calculateVotingPower(String lastVoteTime, int votingPower) {
        try {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
            Date d = df.parse(lastVoteTime+"+00:00");
            double elapsed = (new Date().getTime() - d.getTime()) / 1000;
            double vp = votingPower + (10000.0 * elapsed) / VP_REGENERATION_SECS_STEEM;
            vp = Math.min(Math.floor(vp) / 100, 100);
            return String.valueOf(vp);
        } catch(Exception ex) {
             Log.e(TAG,"", ex);
        }
        return "0";
    }

날짜 계산에 Joda Time 라이브러리를 사용하고 싶었습니다. 하지만 React Native에서 릴리즈 빌드시 오류가 발생합니다. ㅠㅠ Low Level에서 오류가 발생하는 것 같아서 원인을 찾다가 포기했습니다.





리액트 네이티브 기반으로 스팀 위젯 앱 개발을 시작했습니다. 그런데 구현하다보니 여러가지 문제(?)로 위젯 기능을 안드로이드 Java로 다시 구현했습니다. 요 몇일동안 구글 문서보면서 Android 공부하느라 기능 업데이트가 늦어졌습니다. 그리고 피드백은 댓글로 남겨주세요.

위젯 기능을 제외하고는 다른 기능은 리액트 네이티브로 구현하면서 조금씩 업데이트 해보려고 합니다. ㅋ 참고로 저는 본업은 백엔드 개발자입니다. 프론트엔드와 모바일 개발은 취미로 하고 있습니다. 취미로 하는 개발이 더 재미있습니다.


마지막으로 안드로이드 위젯 개발하면서 참고했던 블로그 자료를 모두 공유합니다.

오늘도 해피 코딩하세요~!



관련 자료

Sort:  

이제 안드로이드 자바는 안녕하시공 리액뜨에 전념하쉬길...!!!

안드로이드 전용개발자가 아닌한 비효율적인듯요 ㅋㅋㅋㅋ

어렵다 안드로이드 개발..!!!

기생충 잼나게 보시고용

Posted using Partiko iOS

안드로이드 개발은 행복한 코딩이 아닙니드아~
다시 리액트 네이티브에 전념하려고 합니다. ㅎㅎ

곰돌이가 @anpigon님의 소중한 댓글에 $0.010을 보팅해서 $0.013을 살려드리고 가요. 곰돌이가 지금까지 총 5003번 $56.149을 보팅해서 $63.603을 구했습니다. @gomdory 곰도뤼~

곰돌이가 @happyberrysboy님의 소중한 댓글에 $0.010을 보팅해서 $0.013을 살려드리고 가요. 곰돌이가 지금까지 총 5002번 $56.139을 보팅해서 $63.590을 구했습니다. @gomdory 곰도뤼~

happyberrysboy님이 anpigon님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
happyberrysboy님의 [kr-dev] Firebase 데이터베이스 프로젝트 설정

...에 먼저 데이터베이스만 다루어 보려고합니다. 간단한 앱의 DB로는 Fireabase의 데이터베이스가 짱이라던 anpigon님의 말을 듣고, 설정을 실제로 해보면서 포스팅을 작성해봅니다.
1. Firebase 접속 및 프로...

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 600K SP virus707 account.

아낌없이주는 나무에 대한 후원으로 왔어요. 미약하나마 보팅 하고 가요.

Posted using Partiko Android

Hi @anpigon!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 2.620 which ranks you at #14888 across all Steem accounts.
Your rank has improved 261 places in the last three days (old rank 15149).

In our last Algorithmic Curation Round, consisting of 178 contributions, your post is ranked at #119.

Evaluation of your UA score:
  • Only a few people are following you, try to convince more people with good work.
  • The readers like your work!
  • You have already shown user engagement, try to improve it further.

Feel free to join our @steem-ua Discord server

Congratulations @anpigon! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 3000 comments. Your next target is to reach 3500 comments.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

li-li님이 anpigon님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
li-li님의 스팀잇 KR 주식회사 - nTopaz(81) #190503

... 바랍니다.


https://www.ntopaz.com

A

anpigonasd5710
autokjk70
ayogom


B

banguri
bbana
brunch


...

feelsogood님이 anpigon님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
feelsogood님의 (SCT-EVENT) 땡을 잡아라~ #3

...저의 주사위는 38이 나왔어요. 카카님 이벤트에서 그렇게 안 나오던 38인데;;;

daldalpapa, anpigon jungjunghoon, bluengel


참여방법은 간단합니다. #wdice 주사위를 굴려...

@steem.apps님께서 🎲주사위를 굴려 72 이(가) 나왔습니다.
300 코인 지원 Atomic 지갑 from @bewarecenterbase

@anpigon 님 제인하나 드려구요 제가 aaa sct actrnearn 을 모두하다 보니 ^^ 아이디에 더해서 코인이름도 좀 설정할수있게 해주시면 안될까요 ^^;
맨날 부탁만 드려서 감사합니다.

피드백 감사합니다. 다음 업데이트에 적극 반영하겠습니다. 하지만 요즘 본업이 바빠서 업데이트는 시간이 조금 걸릴것 같습니다. ㅠㅠ

괜찮습니다. 본업이 우선이죠 저도 본업때문에 취미개발은 엄두도 못내고 있습니다.

취미개발을 하시는군요. 취미로 개발하시는 것을 #kr-dev에도 한번 올려보세요. ㅋ