브로드캐스트 7

[FLAG_UPDATE_CURRENT의 비밀]Permission Denial: broadcasting Intent is not exported from uid

같은 어플리케이션 내에서 브로드캐스트를 주고 받는데 외부에서 접근하려고 한다는 에러가 뜬다. 참으로 골치 아픈 에러다.... W/BroadcastQueue: Permission Denial: broadcasting Intent act=com.comostudio.xxx flg=0x10000010 cmp=com.comostudio.xxx/.receiver.yyy } bnds=[556,596][768,692] from com.comostudio.xxx (pid=-1, uid=10000) is not exported from uid 10050 due to receiver com.comostudio.xxx/.receiver.yyy 아무리 인터넷을... 구글링을 해봐도 딱히 맞는 답이 없다. 1. 물론 export..

android.content.ReceiverCallNotAllowedException

리모트 서비스등에서 발생하는 에러로 컨텍스트를 가지고 다니지 못할 때 발생한다. android.content.ReceiverCallNotAllowedException: components are not allowed to register to receive intents위젯, 브로드캐스트, 서비스등과 같이 유령같이 나타나는 얘들은 항상getContext가 아니라 getApplicationContext()를 써서 컨택스트를 들고 다녀야 한다. 스태틱 개념처럼 생각하면 될 듯.

브로드캐스트 리시버에서 하지 말아야 할 것들

안드로이드 브로드캐스트 리시버에서 하지 말아야 할 것들... 일단 생각 나는 것부터 적어 보자. 1. 프로그래스 다이얼로그를 쓰지 말자. 2. asyncTask를 쓰지 말자. android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 둘 다 위와 같은 에러가 난다. 왜냐? 브로드 캐스트는 시스템 스레드에서 도는데 1, 2번은 UI 스레드에서 돌기 때문이다. '결국, 너는 누구냐?' 가 된다

[환불 불가] 안드로이드 브로드캐스트 기차 놓치지 않기!

브로드캐스트를 날리면 티켓을 끊어 놓은 리시버가 무조건 받겠지 하고 생각 할 수도 있지만, 회사 내부 사정으로 티켓을 취소 해버리는 경우도 발생 할 수 있다는 점도 알고 있어야 한다. 리시버에 등록 해놓으면 OS가 기억 하고 있다가 보낼 시간이 되거나 보낼 타이밍이 되면 브로드캐스트를 날린다. 하지만 OS도 내부적으로 바쁘거나 여타 기타 사정으로 브로드캐스트 메시지에 유효기간을 정해 놓았을 경우가 발생 할 수도 있다. 즉, 분명 어떠한 순간에는 이 메시지를 놓칠 수도 있다는 거다. 그럼 어떻게 해야 할까? 어떻게?? public class InitReceiver extends BroadcastReceiver { @Override public void onReceive(final Context contex..

안드로이드 시간대 설정 변경 이벤트

사용자가 직접 시간대를 변경하거나, 비행기를 타고 가다가 새로운 타임존을 만났을 때 안드로이드는 2가지 이벤트를 발생시킨다. 만약, 시간에 민감한 어플리케이션을 운영한다면 이러한 돌발? 변수에 대한 고려를 하지 않았다면.... 뒤통수가 엄청 가려워질 것이다. 사용자가 시간을 변경 했을 때ACTION_TIME_CHANGED 타임존을 변경 했을 때ACTION_TIMEZONE_CHANGED 위 브로드캐스트 메시지를 Manifest 에 등록하고 Receiver에서 아래와 같이 캐치해주면 최소한 가려운 머리에 샴푸는 바른 것이다. if(Intent.ACTION_TIME_CHANGED.equals(intent.getAction()) ){ cancelAlarmManger(); setTime(); } if(Intent..

브로드캐스트리시버 2개 이상 사용시, 부팅후 동적 재등록

1. 브로드캐스트리시버(BroadcastReceiver)를 사용해서 액티비티등에 다시 브로드캐스트를 보낼 수있다. 하지만, 만약 2개 이상의 브로드캐스트리시버를 등록할 경우엔 고려해야 할 점이 있다. public void registerR(){ IntentFilter filter = new IntentFilter(); filter.addAction(DO_1); registerReceiver(mIntentReceiver, filter); IntentFilter filterBoot = new IntentFilter(); filterBoot.addAction(DO_2); registerReceiver(mIntentReceiver, filterBoot); }위와같이 필터를 각각 만들어 주어야 하며, 리시버는 하..