마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

알람 매니저 리시버 질문입니다.

0 추천

위젯에

어플이 로그아웃중인지를 판단해야되어가지구요

로그아웃 함수에다가 

Intent diaryWidget = new Intent("android.appwidget.action.APPWIDGET_UPDATE");
PendingIntent mSender = PendingIntent.getBroadcast(getApplicationContext(), 0, diaryWidget, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mManager.set(AlarmManager.RTC, System.currentTimeMillis(), mSender);

 

알람을 설정해주었습니다.

 

위젯에는

@Override
public void onReceive(Context context, Intent intent)
{
    super.onReceive(context, intent);

    String action = intent.getAction();
    // 위젯 업데이트 인텐트를 수신했을 때

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    ComponentName thisComponent = new ComponentName(context, DiaryWidget2_1.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisComponent);
    final int N = allWidgetIds.length;

    if(action.equals("android.appwidget.action.APPWIDGET_UPDATE"))
    {
        Log.w(TAG, "android.appwidget.action.APPWIDGET_UPDATE");
        
        for(int i = 0 ; i < N; i++){

            DiaryWidget2_1.updateAppWidget(context, appWidgetManager, allWidgetIds[i]);

        }

    }
    // 위젯 제거 인텐트를 수신했을 때
    else if(action.equals("android.appwidget.action.APPWIDGET_DISABLED"))
    {
        Log.w(TAG, "android.appwidget.action.APPWIDGET_DISABLED");

    }
}

 

리시브를 구현해주었구요

정상적으로 작동하나 문제가 있습니다.

로그아웃 후 몇초가 지나야 리시브를 받습니다.

로그아웃 하자마자 바로 받게 하고싶은데

어떻게 해야 될지 궁금합니다.

 

System.currentTimeMillis() - 5000 등 임의로 초를 깎아 보았으나 기기별 리시브 받는 속도가 다른 것 같습니다.

 

 

status (1,410 포인트) 님이 2017년 1월 24일 질문
AppWidget은 일반 sendBroadcast 하는걸 못받나요? 왜 굳이 AlarmManager를 통해서 호출하시지;;;
걍 mSender.send() 로 해보세용.
아 이 부분은 개발이 처음이라 잘 몰라서 그렇습니다.. ㅎㅎ send 로 보내도 정상적으로 작동은 하네요! 근데 딜레이가 5~10초 정도 생기는데 이것을 어떻게 잡아야할 지 를 잘 모르겠습니다. 로그아웃 하면 위젯이 작동되면 안되는데 메시지를 받기 전까진 작동하거든요 ... ㅠㅠ
그냥 send 했는데도 딜레이가 생긴다면 스펙상의 문제일 수도 있습니다. 다른 기기에서도 테스트 해볼 필요가 있겠네요
확인해보니 android.appwidget.action.APPWIDGET_UPDATE 인텐트로 받고 있었는데요 모든 위젯이 이 인텐트로 받아서 딜레이가 생긴다는 글이 있네요. http://technote.kr/48 따라서.. 이름을 android.appwidget.action.APPWIDGET_UPDATE_MY 로 바꿔주었는데, manifast, widget, logout함수 세군데 말고 따로 바꿔주어야할 곳이 있을까요? 정상적으로 메시지 수신을 받지 못하구있는것 같아요

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...