[안드로이드 공부] 204

[안드로이드 스튜디오] 애드몹 lib 추가하기

앱에서 구글 admob 광고를 넣으려면 필요한 lib가 있는데, 안드로이드 스튜디오 사용자는 툴에서 추가 가능하다. Open Module Settings 창(프로젝트 창에서 [app] 을 클릭한 상태에서 마우스 오른쪽 메뉴, 또는 F4 누르면 뜸)에서Ads를 체크해서 추가하면 필요한 dependencies가 추가된다. build.gradle 파일을 확인해 보면 아래와 같이 추가 되었음을 확인 할 수 있다.dependencies { compile 'com.android.support:support-v4:23.0.1' compile 'com.google.android.gms:play-services-ads:7.3.0' } 위 과정후 코드로 광고 추가하면 된다. 개발 할 때는 테스트모드로 광고 확인하자. 애드..

[애드몹] 테스트 광고 요청하기 - 무효노출 방지

개발 중 애드몹(admob) 광고를 달고 테스트 하다 보면 조회수가 올라갈 텐데요, 앱을 테스트할 때 무효 노출이 발생하지 않도록 하려면 테스트 광고를 요청하는 것이 좋습니다. 방법은 코드 상으로 adRequest를 호출할때, addTestDevice를 하면 됩니다. 릴리즈 시에는 .addTestDevice() 부분은 주석 처리하면 됩니다. mAdView = (AdView) findViewById(R.id.adMobView); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // 테스트 광고 요청 .build(); mAdView.loadAd(adRequest); 출처: https://deve..

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

안드로이드 브로드캐스트 리시버에서 하지 말아야 할 것들... 일단 생각 나는 것부터 적어 보자. 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..

Preference dialog 수동으로 띄우기

Preference Dailog 즉, listprefernce, dialogpreference, muliselectelistpreference등은 기본적으로 Preference Screen에서 선택하면 뜨도록 되어있다. 하지만, 수동으로 띄워야 할 경우도 생긴다. 방법은 생각보다 간단하지만, 이 방법을 생각 해내기 까지는 쉽지 않다. ((MyDialogPreference) findPreference(KEY_DIALOG)).show(); public void show() { showDialog(null); } 1. 다이얼로그를 띄울 곳에서 .show를 해주고,2. Preference에 가서 show 메서드를 만들어 주면 된다.

구글 Analytics context와 ApplicationContext ....

구글 아날리틱스를 사용하면 기본적으로 아래 코드가 들어 가야 한다. AnalyticsApplication application = (AnalyticsApplication) context.getApplicationContext(); 하지만 context.getApplicationContext() 가 아니라 context 또는 this 등을 넣으면 java.lang.ClassCastException: cannot be cast to com.xxxx.AnalyticsApplication 이놈을 만나게 된다.. 당연한 얘기지만.... context와 ApplicationContext는 항상 구분해서 잘 쓰도록 하자. Service에서 SharedPreference 사용하기(context와 getApplicati..

안드로이드에서 Super를 쓰지 않으면? Wrong state class -- expecting Preference State

갑자기 아래와 같은 에러가 뜬다면,java.lang.IllegalArgumentException: Wrong state class -- expecting Preference State 아무리... 코드를 봐도... 구글링을 해봐도.... 나에게 맞는 처방전을 쉽게 찾기가 거의 불가능에 가깝다.... 원인 조차도..... 1. preference XML 에 같은 ID를 쓰는 놈이 있는지 찾아본다.2. 동적 코드에서도 같은 ID를 쓰는 놈이 있는지 찾아본다. 여기까지 해서 해결이 안되면,3. onResume() 을 체크 해본다.4. 되도록 onResume()에서 refresh()를 구현 해준다. --> final ListPreference key = (ListPreference) findPreference(..

[안드로이드 스튜디오] avd 패스 설정하기

1G 넘는 avd를 여러 개 만들다 보니 디스크 공간 부족 알림이 뜬다.C: 드라이버에 avd가 생성되어 생긴 현상이다.공간이 넓은 D: 드라이버에 avd를 생성하고 싶어 방법을 찾아보았다. 1. ADNROID_AVD_HOME을 윈도우 환경변수에 지정했다. -> avd 생성은 되나 실행할 때 에러 발생한다. 2. ANDROID_SDK_HOME을 지정해 보았다.윈도우 환경변수에서 ANDROID_SDK_HOME 을 D:\Android\sdk 로 지정해 주었다.avd 매니저로 avd 만들어 보니 $ANDROID_SDK_HOME/.android/avd 폴더 아래에 avd가 생성되는 게 확인된다.(1. 에서 지정했던 ANDROID_AVD_HOME 환경변수는 삭제했다.)-> 문제 해결. 이제 C: 드라이버 공간부족..

[로그 자동화] 안드로이드 디버그 팁

클래스 마다 태그를 넣고 쓰지 말고, 한 곳에서 로그를 관리하도록 하면 편하다. 아래 처럼 Log 클래스를 따로 만들고 필요 한 곳에서 LOG_TAG 함수를 부르면 알아서 클래스 명까지 딱 찍어준다. public static String LOG_TAG = ""; public static String LOG_TAG(Context context){ LOG_TAG = ""; return LOG_TAG = "[" + context.getClass().getSimpleName() + "] "; } 그리고, 디버그 모드 일때만 사용하도록 자동화 시켜 놓자. public static final boolean LOGIF = BuildConfig.DEBUG ? true : false; 결국 이렇게 불러서 쓰면 if(Lo..