ICS 이전 버전까지는 Tethering API 를 사용하기 위해 java reflection 기법을 이용하여 ConnectivityManager 클래스에 가려져 있던 tethering 관련 함수들을 사용하면 되었다.
ICS 버전에는 tethering 연결 및 해제하는 tether()/untether() 함수가 setUsbTethering() 함수로 바뀌었고 인자도 tethering interface 문자열에서 true/false 인 boolean 형으로 바뀌었다.
int setUsbTethering(Context, boolean) 의 형태이다.
true 를 넣어주면 연결된 usb 장치와 tethering 하고 false 를 넣어주면 tethering 연결을 끊는다. 이전처럼 tethering interface 를 명시하지 않아도 된다.
하지만 setUsbTethering() 함수를 부르게 되면 SecurityException 이 발생하면서 android.permission.MANAGE_USB 라는 권한이 필요하다는 내용의 에러를 출력한다.
그래서 android.permission.MANAGE_USB 를 AndroidManifest.xml 에 추가해 보지만 결과는 마찬가지 였다.
확인결과 android.permission.MANAGE_USB 권한은 시스템 앱인 경우에만 취득이 가능했다.
결과적으로 현재로써 배포용 앱은 ICS 에서 Tethering API 를 사용할 수 없다.
참고 - http://tjandroid.blogspot.com/2010/12/enabledisable-usb-tethering.html
(Android Tethering API (froyo or above))
2012년 1월 17일 화요일
2011년 12월 23일 금요일
HttpURLConnection 의 HTTP 연결 문제
HttpURLConnection 을 이용하여 HTTP 로 많은 통신을 요구하게 되는 경우 연결이 불안정한 경우가 있었다.
그 증상은 폰 제조사에 따라서 또는 안드로이드 버전에 따라서 문제가 발생하고 하지 않는 경우가 있었다.
Nexus S ICS 4.0.3 으로 업데이트 후 HTTP 연결 실패 확률이 상당히 높았다.
문제를 확인하던 중 아래 자료들을 찾을 수 있었다.
그 증상은 폰 제조사에 따라서 또는 안드로이드 버전에 따라서 문제가 발생하고 하지 않는 경우가 있었다.
Nexus S ICS 4.0.3 으로 업데이트 후 HTTP 연결 실패 확률이 상당히 높았다.
문제를 확인하던 중 아래 자료들을 찾을 수 있었다.
ssl - Android ICS: Problems to get the server certificate of the HttpsUrlConnection - Stack Overflow:
http://stackoverflow.com/questions/8398622/android-ics-problems-to-get-the-server-certificate-of-the-httpsurlconnection
Android Developers Blog: Android's HTTP Clients:
http://android-developers.blogspot.com/2011/09/androids-http-clients.html
요지는 HttpURLConnection 은 기본적으로 connection pool 을 사용하게 되는데 froyo 이전 버전까지는 connection pool 에 버그가 있어서 해당 기능을 사용하지 않게 했다는 것이다.
System.setProperty("http.keepAlive", "false");
그런데 몇몇 폰이나 ICS 4.0.3 으로 업데이트 되면서 문제가 다시 생긴 건지 아니면 뭔가 안드로이드 개발자들의 설명이 부족했던 것인지 모르겠으나 http.keepAlive 값을 false 로 설정함으로써 문제가 해결되었다.
Nexus S 공식 아이스크림 샌드위치 4.0.3 롬 수동 업데이트
xda-developers - [INFO] Nexus S Official ICS 4.0.3 Released Dec 16!!! (download links): http://forum.xda-developers.com/showthread.php?t=1395828
위 링크 내용을 아래와 같이 정리한다.
1. 롬 업데이트 파일을 다운로드 한다. - 링크 (위 링크 안에 있는 다운로드 링크와 같다)
2. 폰의 외부 저장공간에 'update.zip' 이라는 파일명으로 변경하여 복사한다.
3. fastboot 모드로 부팅한다.
ㄱ. 폰 전원을 끈다.
ㄴ. 볼륨 업 키와 파워 키를 동시에 누르고 부팅이 될때 까지 있는다.
4. Recovery 를 선택한다.
!) 볼륨 업/다운 키로 위 아래로 선택을 이동할 수 있다.
!) 파워 키를 누르면 해당 메뉴로 이동한다.
5. 느낌표 그림이 나오면 파워키와 볼륨 업 키를 동시에 누른다.
!) 파워 키와 볼륨 업 키를 동시에 누르려 하지 말고 파워 키를 누르고 있는 상태에서 볼륨 업 키를 누르면 편이 낫다.
6. 메뉴가 나오면 'apply update from /sdcard' 를 선택한다.
7. 'update.zip' 파일을 선택하면 업데이트가 진행된다.
8. 업데이트 완료 후 재부팅 된다. 끝.
업데이트 시 문제 사항: 업데이트 과정에서 아래와 같은 에러 메시지가 나왔다.
assert failed: file_getprop("/system/build.prop", "ro.build.fingerprint") == "google/soju/crespo:2.3.6/GRK39F/189904:user/release-keys" || file_getprop("/system/build.prop", "ro.build.fingerprint") == "google/soju/crespo:4.0.3/IML74K/239410:user/release-keys"
에러 내용: 에러 내용을 확인해 보면 현재 설치된 빌드 버전이 GRK39F 나 IML74K 이어야 하는데 아니기 때문에 에러가 발생한다는 것을 알 수 있다.
!) 빌드 버전 확인 방법
안드로이드 폰을 부팅하고 '설정' -> '휴대전화 정보' -> '빌드 번호' 를 확인한다.
내 경우 GRJ22 이었다.
해결 방법: GRJ22 에서 GRK38F 로 업데이트 후 ICS 4.0.3 업데이트를 진행할 수 있었다.
GRJ22 에서 GRK38F 로 업데이트 방법: http://www.redmondpie.com/download-and-install-android-2.3.6-gingerbread-grk39f-on-google-nexus-s-how-to-tutorial/
- 업데이트 방법은 동일하다.
참고: Nexus S 2.3.3 수동 업데이트 방법 - http://tjandroid.blogspot.com/2011/03/nexus-s-233.html
위 링크 내용을 아래와 같이 정리한다.
1. 롬 업데이트 파일을 다운로드 한다. - 링크 (위 링크 안에 있는 다운로드 링크와 같다)
2. 폰의 외부 저장공간에 'update.zip' 이라는 파일명으로 변경하여 복사한다.
3. fastboot 모드로 부팅한다.
ㄱ. 폰 전원을 끈다.
ㄴ. 볼륨 업 키와 파워 키를 동시에 누르고 부팅이 될때 까지 있는다.
4. Recovery 를 선택한다.
!) 볼륨 업/다운 키로 위 아래로 선택을 이동할 수 있다.
!) 파워 키를 누르면 해당 메뉴로 이동한다.
5. 느낌표 그림이 나오면 파워키와 볼륨 업 키를 동시에 누른다.
!) 파워 키와 볼륨 업 키를 동시에 누르려 하지 말고 파워 키를 누르고 있는 상태에서 볼륨 업 키를 누르면 편이 낫다.
6. 메뉴가 나오면 'apply update from /sdcard' 를 선택한다.
7. 'update.zip' 파일을 선택하면 업데이트가 진행된다.
8. 업데이트 완료 후 재부팅 된다. 끝.
업데이트 시 문제 사항: 업데이트 과정에서 아래와 같은 에러 메시지가 나왔다.
assert failed: file_getprop("/system/build.prop", "ro.build.fingerprint") == "google/soju/crespo:2.3.6/GRK39F/189904:user/release-keys" || file_getprop("/system/build.prop", "ro.build.fingerprint") == "google/soju/crespo:4.0.3/IML74K/239410:user/release-keys"
에러 내용: 에러 내용을 확인해 보면 현재 설치된 빌드 버전이 GRK39F 나 IML74K 이어야 하는데 아니기 때문에 에러가 발생한다는 것을 알 수 있다.
!) 빌드 버전 확인 방법
안드로이드 폰을 부팅하고 '설정' -> '휴대전화 정보' -> '빌드 번호' 를 확인한다.
내 경우 GRJ22 이었다.
해결 방법: GRJ22 에서 GRK38F 로 업데이트 후 ICS 4.0.3 업데이트를 진행할 수 있었다.
GRJ22 에서 GRK38F 로 업데이트 방법: http://www.redmondpie.com/download-and-install-android-2.3.6-gingerbread-grk39f-on-google-nexus-s-how-to-tutorial/
- 업데이트 방법은 동일하다.
참고: Nexus S 2.3.3 수동 업데이트 방법 - http://tjandroid.blogspot.com/2011/03/nexus-s-233.html
피드 구독하기:
글 (Atom)