결론은 비동기냐 아니냐 차이


popBackStack


Added in API level 11

void popBackStack ()

Pop the top state off the back stack. This function is asynchronous -- it enqueues the request to pop, but the action will not be performed until the application returns to its event loop.



popBackStackImmediate


Added in API level 11

boolean popBackStackImmediate (int id, 

                int flags)

Like popBackStack(int, int), but performs the operation immediately inside of the call. This is like calling executePendingTransactions() afterwards.

Posted by 빈솔B
,

http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/

Posted by 빈솔B
,

http://git-scm.com/download/win




http://stackoverflow.com/questions/20923193/bitbucket-windows-and-fatal-could-not-read-password-for

Posted by 빈솔B
,

The free plan of Bitbucket supports unlimited private or public Git/Mercurial repositories and up to 5 users.


http://stackoverflow.com/questions/2378120/is-there-a-free-private-git-repository

Posted by 빈솔B
,

http://www.cnet.co.kr/view/23797

Posted by 빈솔B
,

오랫만에 포스팅이다

최근에 앱 업데이트를 진행하다가

안하던 짓을 했다.

기존에 manifest 파일에 minSdkVersion="8" 만 세팅해서 쓰다가 아래의 이클립스 warning 경고가 눈에 거슬려 

<uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?"

뭐 별일 있겠냐 싶어서 targetSdkVersion="14"로 설정했다. 단순히 나는 target을 "이 앱은 해당 버전에 최적화 되었습니다." 라고 이해하고서는 말이다.

배포를 하고나니 플레이어 재생시 가로세로 전환마다 동영상 재생이 재시작 되는 버그가 나타났다.


오. 마. 이. 갓.;


소스에 문제로 우선 판단하고 디버깅했으나 별다는 이상 여부 없었다. 혹시나 하는 맘에 해당 targetSdkVersion을 빼보니 정상 동작;;; 뭐지 이거 단순한 알림 개념이 아니었나;

레퍼런스를 찾아봤다.

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html 


android:targetSdkVersion
An integer designating the API Level that the application targets. If not set, the default value equals that given to minSdkVersion.


앱이 타킷으로 하는 API 레벨을 지정된 상수코드란다. 지정하지 않으면 minSdkVersion과 동일시 한단다. 그렇구나. 기존에는 API레벨이 8로 지정되어 쓰이다가 14로 바뀌면서 MediaPlayer 작동방식이 바뀐게 있나보다;

여튼 다시 해당 속성은 빼고 정상화 시키도록 했고, 미디어 재생 프로세스는 바뀐게 뭐가 있는지 또 찾아봐야겠다.


결론은...  targetSdkVersion 제대로 알고 확인하고 쓰자!!!

Posted by 빈솔B
,
라이브러리에서 제공하는 기본 체크박스 이미지 대신 다른 이미지를 쓰고 싶다면
아래와 같이 setBackgroundResource 아닌 setButtonDrawable 값으로 사용하면 된다.

CheckBox deleteCheckBox = ((CheckBox)view.findViewById(android.R.id.checkbox));
deleteCheckBox.setButtonDrawable(R.drawable.btn_check_off); (o)
deleteCheckBox.setBackgroundResource(R.drawable.btn_check_off); (x)

XML로는
android:button="@drawable/button_img"

Posted by 빈솔B
,
안드로이드 폰에서 브라우저 테스트를 하던중 안드로이드 시스템 파일인 호스트 파일을 수정해야 할 일이 생겼다. 구글링 해보았다. 여러 곳에 잘 나와 있었다.
그런데 adb remount 하는 순간 Operation not permitted 이다 헐; 루팅을 해야 하는건가.. 내가 가진 시료는 시중제품의 넥서스원이다. 아.. 귀찮어.. 어떻게든 host 파일 안바꾸고 해볼려했으나.. 방법이 없었다;
좋다.. 귀찮은 루팅 한번 해보자꾸나; 예전의 그토록 지겹고 힘들었던 htc g2 언락및 루팅작업이 생각났다.. 착수하기도 전에 힘들어졌다.. but 구글링을 시작했다.
안드로이드 펍에서 잘 정리해 놓은 블로그를 하나 찾았다.
쉬운 영어로 잘 설명되어있었다. 하다가 뻑나면 책임없다는 친절한 설명도 덧붙여있다.^^;
기본적으로 sdk는 다운로드 받아 설치되어있어야 하며, 드라이버도 잡혀 있어햐 한다. 즉 tools에 있는 adb쓸 수 있는 환경부터 만들어야 한다. 어렵지 않지만 꼬이면 구글신밖에 답이 없다.
어쨌든 순서를 간단히 정리해보면
1. 넥서스원을 pc에 연결한다.
2. 트랙볼을 누른상태로 파워버튼을 누르면 "FASTBOOT" 모드로 들어온다.
3. 그 상태에서 pc에서 $fastboot oem unlock 을 친다.
4. 그러면 언락 안내 화면에 y/n 선택화면이 나온다. 볼륨키로 y를 선택한다. 
5. 실패 메세지가 있더라도 신경쓰지 말아라 재부팅시 스플래시 화면 하단에 언락된 자물쇠 표시가 나타난다.
6. 다음으로 플래시복구이미지 파일을 받는다. 
Normal version : recovery-RA-nexus-v1.7.0.1.img (Click here to download from a Mirror) - MD5Sum: b5dbd17b153530247e7b90dfe501b9dd
CyanogenMOD version : recovery-RA-nexus-v1.7.0.1-cyan.img (Click here to download from a Mirror) - MD5Sum: a28f913327cc3bfdf908d6a553852dba
위 페이지 중간정도에 두 가지 버전의 복구모드 이미지가 있다. 내용을 좀 찾아보니 CyanogenMOD 버전이 낫겠다 싶어 이걸로 선택했다.
7. 이번엔 볼륨 다운키와 파워버튼을 눌러 부팅시킨다. "HBOOT" 모드로 들어온다.
8. PC에서 $fastboot flash recovery  recovery-RA-nexus-v1.7.0.1-cyan.img  실행시켰다. 이후 fastboot 모드로 재부팅해서 recovery을 선택하니 삼각형의 경고창이 떴다.. 헐;; 벽돌이 되었다.. 역시 쉽게 안되는군아..
그래서 이번엔 $fastboot flash recovery  recovery-RA-nexus-v1.7.0.1.img 일반버전으로 다시 설치했지만.. 역시나 안되었다.. 그래서 그 이후 작업은 중단되고 다시 구글링을 했다.
(이 후 작업이 소스를 직업 받아서 빌링하는 작업이었는데 이를 위해 윈도운영체제를 주로 쓰는 내게 리눅스 설치가 귀찮고 시간 부담도 커서 Cygwin을 받아서 설치하고, 이 참에 안드로이드 소스까지 다운받고 여튼 엄청 삽질했건만..ㅜ.ㅜ)

다른 좋은 방법을 찾아보았다. 언락은 성공했으니 루팅하는 방법 위주로 찾아보았다.
동영상 시연까지 곁들인 멋진 블로깅이었다. 이번엔 sdcard가 필요했다.. 에효.. 앗. 시리우스폰에 있었지! 그리고 리더기도 어찌어찌 구해서 그대로 실행해보았다. 이번엔 어찌된 영문인지 recovery 화면을 성공리에 볼 수 었다. 별다른 한것도 없는데.. 미지수다.. 어쨌든  Cyanogen’s N1 Addon. 파일까지 받아서 recovery 모드에서 Flash zip from sdcard를 선택(이때 선택은 트랙볼로 선택)해서 해당 파일 nexus-addon-0.1-signed.zip을 실행했다. 드뎌 리부팅이 성공적으로 되고! 루트 접근도 잘되었다! 성공했다!.. 라고 생각했다.
근데 이게 뭔가.. 자꾸 안드로이드가 죽는다. 시도 때도 없이 죽는다.. 헐;; 루팅의 말로가 이런거구나..

원인이 뭘까.. 곰곰히 생각해보다가 프로요 2.2 버전으로 업데이트 해서 혹시 옛날 버전의 루팅 방법을 시도해서 그런게 아닐까 생각해서 다시 구글신을 찾았다. <프로요, 안드로이드, 2.2, 루팅> 키워드로 찾던중  
[ROOT] [KERNEL] [2.6.34] Quick rooter for stock FroYo systems + 2.6.34 kernel Next Thread http://forum.xda-developers.com/showthread.php?t=686627
Cyanogen has a quick rooter up already: http://forum.xda-developers.com/showthread.php?t=686627 And Paul has a rom ready to flash from custom recovery: http://forum.xda-developers.com/showthread.php?t=686631
이런 방법을 찾았다 역시 sdcard로 플래시를 굽는 방법이었다. 두 개의 파일 
Tweaked kernel: http://n0rp.chemlab.org/android/nexu...l34-signed.zip
두 개의 차이점을 잘 몰라 Stock 커널을 설치했다. 아! 안정적이다! 드뎌 성공인가 했더니 이상하게 Wifi 설정이 계속 Error라고 표시되는 것이다..헐;;;
이건 또 무슨 조화인가.. 또 구글신..
이런 아리송 대답이 있었으나 근본적인 원인은 파악이 안되었다.
그래서 역시 flash 파일에 문제가 있다보고 Tweaked 커널 버전을 설치했더니.. 드뎌.. 안정적으로 부팅에 성공했다..

Unlocking & Rooting. 쉽지 않다;;; 
 
Posted by 빈솔B
,
안드로이드 폰.. 이젠 정말 종류가 너무나 많아졌다.. 우려했던 일 만큼 유지보수 비용이 늘어나고 있다..
아이폰에 비해 취약점 중에 하나이다. 기회가 많은 만큼 할 일은 많아진다;;;

tv팟도 늘어나는 단말기마다 대응하려니 이것저것 예외사항이 많아진다. 개발자 입장으로서 제일 싫은게;; 예외 처리이다.. 이럴때면 아이폰 개발자가 부럽다;;
여튼 이렇게 단말기 마다 대응하고자 할때 실행되는 단말의 모델네임을 가져올 필요가 생기게 된다.
아주 간단하다.

import android.os.Build;
System.out.println("modelName is :"+Build.MODEL);
System.out.println("device is :"+Build.DEVICE);
System.out.println("ProductName is :"+Build.PRODUCT);

예로들어 
삼성 갤럭시S는 SHW-M110S
삼성 갤럭시A는 SHW-M100S
넥서스원은 Nexus One
등등.. 으로 나온다.

이건 소스에서 확인방법이고 단말에서 설정>휴대전화정보>모델 번호로 바로 확인할 수도 있다.

Posted by 빈솔B
,
안드로이드 tv팟 개발하다가 안 사실인데 쿼티 자판 있는 모델은 슬라이드시에 Destory() 콜을 하더군요
그래서 페이지가 refresh가 자동으로 되는 현상이 나타납니다. 심지어는 동영상 재생시 슬라이스를 하면 동영상이 다시 처음부터 재생되는 현상이 나타나더군요.

그래서 처음엔 슬라이스시에 호출되는 메소드가 가로모드, 세로모드 전환시 호출되는 메소드가 같을 꺼라 생각하고 관련 자료를 찾아보니 아래와 같인 메소를 찾을 수 있었습니다. 

@Override
public void onConfigurationChanged(Configuration newConfig) {
System.out.print("test");
switch(newConfig.orientation){
case Configuration.ORIENTATION_LANDSCAPE:
System.out.print("가로");
return;
case Configuration.ORIENTATION_PORTRAIT:
System.out.print("세로");
return;
}
super.onConfigurationChanged(newConfig);
}

하지만 위의 메소드는 가로세로 모드 전환시에만 호출되지 슬라이스와는 상관이 없던 메소드더군요 그래서 구글링을 더 해본 결과 Manifest.xml 설정을 통해 슬라이드시 환경변화 작업을 무시하도록 아래와 같이 설정가능함을 발견했습니다.

<activity android:name=".ClipView" android:label="Media/MediaPlayer"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"      
android:configChanges="keyboardHidden|orientation" >
</activity>

자세한 사항은 아래주소를 참고하세요.
 
Posted by 빈솔B
,