ICESS release note Android

* 12.01.14.01
- Book
별점 기능 추가 
- Movie
별점 기능 추가

* 12.01.08.01
- Book
도서관 코드 저장안되는 문제 수정

* 11.12.29.01
- Book
ZXing Barcord Scanner를 통한 ISBN연동 추가
ZXing Barcord Scanner가 없을 경우 마켓 연동되도록 수정
특정 서적 검색결과 오류 수정
검색 지정된 타입의 결과는 Bold체로 넘어와서 <b></b>태그가 따라 붙으므로 태그 제거 필요
%가 들어가 있는 결과는 WebView에서 영향을 미치므로 &#37;로 변경

* 11.12.28.01
- Book
다음 Open API로 책검색 후 선택하여 정보 자동 입력하도록 수정
검색창에서 엔터 입력시 바로 검색되는 기능 추가
본날짜 숫자입력만 가능하도록 수정
안본 책을 위에 오도록 정렬
본책 표시 제목 왼쪽으로 이동(붉은색 ||로 변경)
세로보기만 가능하도록 수정
책검색 오류시 Toast 출력

* 11.12.26.01
- Movie
본날짜 숫자입력만 가능하도록 수정
안본 영화를 위에 오도록 정렬
본영화 표시 제목 왼쪽으로 이동(붉은색 ||로 변경)
세로보기만 가능하도록 수정
영화검색 오류시 Toast 출력
- Password
세로보기만 가능하도록 수정
URL입력란에 URL입력형태 IME 나오도록 수정(android:inputType="textUri")

* 11.12.25.01
- Movie
다음 Open API로 영화검색 후 선택하여 정보 자동 입력하도록 수정
검색창에서 엔터 입력시 바로 검색되는 기능 추가

* 11.12.17.01
- Weight
입력창의 . Kg 색상 #000000 적용
신규입력 기본값 70.5 적용
- Password
탈퇴 색상 #000000 적용

* 11.11.14.01
- Voca Trainer
Notification에 OnGoing flag지정
오디오 플레이어에서 mp3확장자 검색되어 vtf확장자로 변경


공유하기 버튼

 

Voca Trainer Android

* 11.10.30.01까지 개발내용
- 영어 단어(발음), 영어 철자(발음), 한글 단어(발음) - Google TTS 이용 발음 듣기 기능(http://goo.gl/mLB5N)
- Portrait only

- App 시작
VocaTrainer - type : refresh, play : true, next : false
VocaTrainerService - DB갱신, random선택, timer시작
- 일시정지 버튼
VocaTrainer - type : continue, play : false, next : false
VocaTrainerService - timer중지
- 재생 버튼
VocaTrainer - type : continue, play : true, next : false
VocaTrainerService - timer시작
- 다음재생 버튼
VocaTrainer - type : continue, play : true, next : true
VocaTrainerService - random선택, timer시작
- 종료
VocaTrainer - type : stop
VocaTrainerService - stopSelf()
- 단어관리, 설정 화면 종료시
SingleTask(SingleInstance)인 경우 startActivityForResult()를 호출하면
setResult()가 호출되지 않아도 바로 onActivityResult()가 호출되어 사용하지 못함
따라서 Started Activity에서 Broadcast를 날려 Starting Activity에서 처리하도록 함
action : VOCA_TRAINER_ACTION, extra : refresh
VocaTrainer - type : refresh, play : 기존 상태, next : false
- VocaTrainerService에서 단어 변경시
action : VOCA_TRAINER_ACTION, extra : update

공유하기 버튼

 

Android App에서 Google TTS(Text -To-Speech)사용하기 Android

Google 번역사이트(http://translate.google.com)에서 글자를 입력 후 스피커 모양의 버튼을 누르면 TTS음성 들을 수 있다.
(아래 붉은 표시)
국내 포털의 영어사전 사이트에서도 영어 단어의 발음을 들을 수 있는데,
개인적으로는 Goolgle의 TTS 음성이 제일 맘에 들었다.
(Nate, Daum, Naver는 모두 같은 content를 source로 사용하는 것으로 보이고, Yahoo만 다른 발음으로 들렸다.
구글 번역의 TTS 음성 부분은 아래 URL을 통해 브라우져에서 바로 확인이 가능하다.
주소창에 http://translate.google.com/translate_tts?tl=언어&q=단어 형식으로 입력하면,
각국의 언어로 TTS음성을 들을 수 있다.

나는 개인적으로 영어 단어장을 Android App으로 만들어서 사용하고 있었고,
이 TTS정보를 이용해서 발음까지 들을 수 있는 단어장을 만들고 싶었다.
Android의 브라우저를 통해 위 URL에 접속해보니 접속은 되는데 음성은 들리지 않았다.
그래서 우선 TTS음성의 컨텐츠 타입이 무엇인지를 확인해보았다.
HttpURLConnection의 getContentType()으로 읽어보니 "audio/mpeg"으로 나왔다.
그래서 데이터를 읽어 mp3 파일로 저장을 했더니 잘 들렸다.

"이제 준비가 다 되었으니 코딩을 시작해볼까?"하고 열심히 코딩을 한 뒤 실행을 했다.
그런데 영어는 잘 들리는데 한글은 아무 소리가 안들렸다.
이상하네...URL정보를 복사해서 브라우저에 붙혀넣으면 분명 잘 들렸다.
"혹시 URL Encoding을 해야하는 건가?" 하고 열심히 구글링을 해보았다.
역시나...URL을 UTF-8로 Encoding을 해야했다.
그리고 다시 실행을 해보았다.
이전과 똑같이 한글을 들리지 않고, "모르는 기호"라는 음성만 들렸다.
또다시 구글링을 열심히 해보았지만, 구글 TTS에서 한글처리에 관한 내용은 보이지 않았다.

며칠을 답답해 하던중 안드로이드 브라우저에서 소리가 들리지 않았던 것이 떠올라 
브라우저에 따라 달라질 수도 있겠다는 생각이 들었다.
브라우저나 HttpURLConnection API나 둘다 Webkit기반이니 동일하게 동작할테고...
그래서 User Agent를 변경하니 App에서 한글도 잘 들렸다.

String GOOGLE_URL = "http://translate.google.com/translate_tts?tl=%s&q=%s";
String USER_AGENT = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401";
String UNICODE_CHARSET = "UTF-8";

encodedText = URLEncoder.encode(text, UNICODE_CHARSET);
URLConnection conn = new URL(requestUrl).openConnection();
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("User-Agent", USER_AGENT);
conn.connect();



공유하기 버튼

 

알림기능(Notification) 다루기 Android

* 알림기능을 다루기 위해서는 시스템 서비스인 NotificationManager와 Notification객체를 사용한다.

1. Notification객체 생성
Notification클래스는 생성자에 상단 상태표시줄에 보여질 아이콘, 타이틀 문구, 시간을 인자로 넘겨준다.
Notification notify = new Notification(R.drawable.my_icon, "Notification!", System.currentTimeMillis();

2. Intent객체 생성
상태표시줄을 끌어내려 확장했을때 알림을 선택할 경우 다른 activity를 실행하도록 설정한다.
Intent goto = new Intent(my_notification.this, my_notification.class);
3. PendingIntent객체 생성
PendingIntent intentBack = PendingIntent.getActivity(Notifications.this, 0, toLaunch, 0);
4. 생성한 Notification객체의 setLatestEventInfo()메서드 실행
상태표시줄을 끌어내려 확장했을때 표시될 타이틀, 내용, 선택시 실행될 intent객체 지정
notify.setLatestEventInfo(ctx, "Title", "Text-1234567890", intentBack);
5. NotificationManager 인스턴스 생성
NotificationManager notifier = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
6. NotificationManager의 인스턴스의 notify()메서드로 Notification객체 전달
각 알림을 구별할 수 있도록 id와 Notification객체 전달
notifier.notify(0x1001, notify);

* 같은 Notification객체로 중복된 알림이 있을 경우 상태표시줄에 알림 횟수를 표시해줄 수 있다.
notify.number = 2;
* 알림의 삭제
알림을 삭제하기 위해서는 알림의 id를 지정하여 삭제할 수 있다.
notifier.cancel(0x1001);
또한, Nofitication객체의 flags속성에 FLAG_AUTO_CANCEL을 지정해 줄 경우 사용자가 해당 알림을 선택시 즉시 삭제된다.
notify.flags |= Notification.FLAG_AUTO_CANCEL;

* 알림의 사용자 피드백
- 진동(Vibrator)
Vibrator를 사용하기 위해서는 AndroidManifest.xml에 아래 권한을 추가해줘야 한다.
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>

진동의 설정은 홀수 배열은 진동의 시간, 짝수 배열은 진동이 멈춰있는 시간이다.
다음은 100ms진동 후 100ms진동이 멈추고, 이후 200ms간 진동이 울리고, 200ms동안 진동이 멈추게 된다.
  notify.vibrate = new long[] {100, 100, 200, 200, 300, 300, 400, 400, 500, 500};
이 패턴을 잘 활용하면 사용자에게 다양한 피드백을 전달할 수 있다.
FLAG_INSISTENT플래그를 설정할 경우 자용자가 알림을 제거할때까지 반복 재생된다.

- 지시등(LED)
LED는 Vibrator와 달리 LED를 켜고 끄는 시간만 지정해주고 사용자가 알림을 제거할때까지 반복된다.
notify.flags |= Notification.FLAG_SHOW_LIGHTS;
notify.ledARGB = Color.GREEN;
notify.ledOffMS = 1000;
notify.ledOnMS = 1000;

- 소리(Sound)
notify.sound = Uri.parse("file:/system/media/audio/ringtones/sample.ogg");
FLAG_INSISTENT플래그를 설정할 경우 자용자가 알림을 제거할때까지 반복 재생된다.

* 사용자 정의 알림 만들기
용자는 자신만의 알림화면을 구성할 수 있다.
알림에 표시될 별도의 layout을 생성한 후 아래와 같이 지정하면 된다.
RemoteViews remote = new RemoteViews(getPackageName(), R.layout.mynoti);
remote.setTextViewText(R.id.txxTitle, "Title");
remote.setTextViewText(R.id.txxText, "Text-1234567890");
notify.contentView = remote;

공유하기 버튼

 

Wifi 다루기 Android

* Android Manifest.xml수정
Wifi를 사용하기 위해서는 아래 두 permission이 추가되어야 함
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>


* 현재 supplicant의 정보 얻기
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();

Log.d("WIFI", "BSSID : " + wi.getBSSID());
Log.d("WIFI", "Hidden SSID : " + wi.getHiddenSSID());
Log.d("WIFI", "IP : " + wi.getIpAddress());
Log.d("WIFI", "LinkSpeed : " + wi.getLinkSpeed());
Log.d("WIFI", "MAC Addr. : " + wi.getMacAddress());
Log.d("WIFI", "Net ID : " + wi.getNetworkId());
Log.d("WIFI", "RSSI : " + wi.getRssi());
Log.d("WIFI", "SSID : " + wi.getSSID());
Log.d("WIFI", "Supplicant State : " + wi.getSupplicantState());
Log.d("WIFI", "Detailed State : " + WifiInfo.getDetailedStateOf(wi.getSupplicantState()));
Log.d("WIFI", "String : " + wi.toString());
Log.d("WIFI", "Ping Result : " + wm.pingSupplicant());

// Wifi가 연결되었는지 상태 체크
        DetailedState ni_ds = WifiInfo.getDetailedStateOf(wi.getSupplicantState()); 
        if ((wi.getIpAddress()!= 0) 
&& (ni_ds == DetailedState.CONNECTED || ni_ds == DetailedState.OBTAINING_IPADDR)){
         // Wifi AP에 연결된 상태
        }

공유하기 버튼

 

1 2



카운터

free counters

댓글

[위자드팩토리] 우리 문화 알리기 - Korea Sparkling

포춘쿠키

블로그 스티커 - 충전이 필요해