Android/App개발2010. 3. 17. 16:23
http://android-developers.blogspot.com/2010/03/speech-input-api-for-android.html

사람들은 그들이 어디에 있건 만질 수 있다는것 때문에 모바일폰을 선호한다. 그것은 단지 통화뿐이 아니라 이메일, 문자, 마이크로블로깅 등등을 이용할 수 있다는 것을 의미한다. 여기에 search by voice와 voice shortcuts이 추가되었다. Android 2.1에 voice-enabled keyboard로 추가하였으며 이는 연결을 유지하는것도 쉽게 해준다. 이제 당신은 메세지를 타이핑하지 않고 작성가능하다. 그냥 keyboard상의 마이크모양 버튼을 누르기만 하면 된다.

우리는 speech기능이 모바일경험의 근본적인 변화를 일으킬수 있다고 믿는다. 우리는 모든 안드로이드 개발자들을 Android SDK을 이용하여 음성입력기능을 통합하는데 관심을 갖도록 초대하고 싶다. 내가 즐겨 사용하는 음성인식기능어플중에 Handcent SMS을 사용하는데 SMS에 대한 답장을 SMS popup window을 tab함으로써 쉽게 할 수 있다.

Speech input integrated into Handcent SMS

Android SDK는 어플개발시 쉽게 바로 사용할수 있도록 해준다. 그냥 sample application 의 코드를 copy-paste하면 된다. 안드로이드는 오픈플랫폼이기 때문에 당신의 어플은 RecognizerIntent을 수신하는 receiver를 등록하여 임의 어떤 음성인식 어플이든지 만들수 있다. 많은 안드로이드 디바이스에 기본적으로 탑재되어 있는 구글의 Voice Search App는 "Speak now" 팝업을 통해 RecognizerIntent에 응답하며 Google의 서버에 오디오를 전송한다-search widget이나 voice-enabled keyboard상의 마이크 아이콘을 선택했을때에도 이 서버가 이용된다(Settings->Applications->Manage applications에서 Voice Search가 설치되어 있는지 확인가능하다)

중요한 한가지 팀: 음성인식을 가능한 정확하게 하려면, 대화에 어떤 단어가 사용되는지에 대해 아는것이 도움이 된다. email이나 SMS메세지 작성시에는 "Mom, I'm writing you this message with my voice!"같은 유형이 적당할것이며 Google Search에서는 "weather in Mountain View"같이 말하는것이 적당할 것이다. 당신은 사용자가 적절한 language model을 요구하는것으로 최고의 경험을 가능하도록 할 수 있다: "free_form"은 dictation, "web_search"는 더 짧은 검색같은 구문에 적당하다.  우리는 Nexus One의 voice keyboard에서 dictation의 정확도를 향상시키기 위해 "free_form"모델을 개발했다. 반면 "web search"모델은 사용자가 음성으로 검색하고자 할때 사용된다.

Google의 서버는 현재 영어, 만다린(중국), 일본어만 지원한다. Web search 모델은 3가지를 모두 지원하며 free-form모델은 영어에만 최적화되어 있다. 앞으로 더 다양한 언어와 정확도를 개선해 나갈것이며 이를 개발자들이 사용할 수 있게 될것이다.


Posted by 삼스
Android/App개발2010. 2. 23. 21:50

SDK로 App개발시에는 eclipse의 debug기능을 사용할수도 있으나 플랫폼 개발시에는 이런 방법이 안통한다.

이떄 아래 코드처럼 일부러 exception을 발생시킨다음. try catch문을 이용해서 call stack을 찍어주면 해당 함수가 호출될때마다 Logcat에 호출경로를 찍어줍니다.


    @Override
    public void setVolumeControlStream(int streamType) {

        Log.d(TAG, "setVolumeControlStream -> " + streamType);        

        mVolumeControlStreamType = streamType;
      try {
         int c=1; c = c/0;

     } catch(Exception e) {

         e.printStackTrace();    

     }    

    }


Posted by 삼스
Android/App개발2010. 2. 7. 15:50
Posted by 삼스
Android/App개발2010. 2. 7. 15:50

Controls for the Android OS
Keyboard OS function
Escape Back button
Home Home button
F2, PageUp Menu (Soft-Left) button
Shift-F2, PageDown Star (Soft-Right) button
F3 Call/Dial button
F4 Hangup/EndCall button
F5 Search button
F7 Power button
Ctrl-F3, Ctrl-KEYPAD_5 Camera button
Ctrl-F5, KEYPAD_PLUS Volume up button
Ctrl-F6, KEYPAD_MINUS Volume down button
KEYPAD_5 DPad center
KEYPAD_4 DPad left
KEYPAD_6 DPad right
KEYPAD_8 DPad up
KEYPAD_2 DPad down
Controls for the Android Emulator
Keyboard Emulator function
F8 toggle cell network on/off
F9 toggle code profiling (when -trace option set)
Alt-ENTER toggle fullscreen mode
Ctrl-T toggle trackball mode
Ctrl-F11, KEYPAD_7 switch to previous layout
Ctrl-F12, KEYPAD_9 switch to next layout
KEYPAD_MULTIPLY increase onion alpha
KEYPAD_DIVIDE decrease onion alpha
Posted by 삼스
Android/정리2010. 1. 21. 12:01
Activity의 메인 윈도우에 어떻게 on-screen soft keyboard가 동작할것인지에 대한 방법을 기술한다.
이 설정은 두가지에 대해 영향을 준다.
 1. soft keyboard의 상태 - activity가 사용자의 포커스를 받을때 보여질지 숨겨질지
 2. activity의 메인윈도우를 조정할지 - soft keyboard의 크기를 줄이거나 soft keyboard에의 해 덮어씌워질때 윈도우 사이즈를 조정하거나 한다.

아래 나열한 값들 중에 하나이상을 나열할 수 있으며 "state.."값하나와 "adjust.."값 하나씩 사용할 수 있다.
각 그룹에 여러개의 값을 지정하는것은 정의되어 있지 않으며 각 값은 |로 분리하여 나열할 수 있다.

stateUnspecified : hidden 또는 visible을 지정하지 않음. 시스템이 알아서 선택하거나 theme의 값을 참조한다.
stateUnchanged : activity가 foreground로 올때 마지막 상태(visible, hidden)를 유지하고 있는다.
stateHidden : activity 실행중에 hidden이다. that is, when the user affirmatively navigates forward to the activity, rather than backs into it because of leaving another activity.
stateAlwaysHidden : activity가 focus를 가지고 있으면 무조건 softkeyboard는 hidden으로 함.
stateVisible : 일반적인 모드로 동작
stateAlwaysVisible : activity 실행중에 visible이다.  that is, when the user affirmatively navigates forward to the activity, rather than backs into it because of leaving another activity.

adjustUnspecified : resize나 pan하지 않는다. 메인윈도우의 디폴트셋팅이다. 시스템은 자동으로 하나의 모드를 선택하는데 자신의 콘텐츠를 스크롤할 수 있는 layout view를 윈도우가 가지고 있는지에 따라 결정된다. 만일 그런 view라면 윈도우는 resize되어 더 작은 영역에서 모든 윈도우의 콘텐츠가 스크롤되어 표시될수 있어야 한다.
adjustResize : Activity의 메인윈도우가 softkeyboard에 따라 항상 resize된다. 
adjustPan : Activity의 메인윈도우가 resize되지 않고 pan된다. 따라서 keyboard에 의해 현재 포커스가 가려지지 않아서 사용자는 항상 타이핑결과를 볼수가 있다. resizing옵션보다 권장되지 않는데 사용자는 윈도우상에 보이지 않는 부분을 보기 위해 softkeyboard를 닫아야 하기 때문이다. 


화면의 하단에 EditText가 하나 있다고 가정후 두 옵션의 차이점은 아래와 같다.
 1. adjustResize : 메인윈도우 사이즈가 줄어든다, 하지만 EditText는 보이지 않는다. 스크롤이 지원되면 스크롤하여 볼수는 있다.
 2. adjustPan : 메인윈도우 사이즈가 줄어들지 전체적으로 않고 EditText가 보이도록 위로 올라간다. EditText는 보이나 다른 UI가 보이지 않는다.







Posted by 삼스
Android/정리2010. 1. 14. 13:00
1. ENG모드로 빌드하면 됨.
2. initramfs의 default.prop파일의 secure값이랑 adb값, debuggable값을 각각 0,1,1로 setting한 걸로 바꾸면 됨.
Posted by 삼스
Android/정리2010. 1. 13. 17:11
PowerManager는 Screen을 On/Off할때 WindowManager에 통지를 하고 이는 KeyguardViewMediator를 통해 LockScreen에도 전달된다.

PowerManagerService.mNotificationTask
    -> WindowManagerPolicy.screenTurnedOn()
        -> KeyguardViewMediator.onScreenTurnedOn();
    -> WindowManagerPolicy.screenTurnedOff()
        -> KeyguardViewMediator.onScreenTurnedOff();

Posted by 삼스
Android/정리2010. 1. 13. 16:24
Android concept이다.
Keyguard가 표시중이거나 Hidden일경우 PowerManager.enableUserActivity(true)에 의해 mUserActivityAllowed변수가 set되면서 PowerManager.userActivity(..)에서 setPowerState가 정상적으로 호출될 수 있다.
PowerManager.userActivity는 WindowManagerService.InputDispatcherThread에서 이벤트큐의 이벤트를 처리할때마다 호출된다. 따라서 PowerManager.enableUserActivity()로 screen timeout을 ON/OFF할 수 있다.

Keyguard에서 이를 이용해 LockScreen이 표시중에는 사용자 입력이 있더라도 무조건 5초후에 꺼지도록 되어있다.
KeyguardViewMediator.java
private void adjustUserActivityLocked() {
        // disable user activity if we are shown and not hidden
        if (DEBUG) Log.d(TAG, "adjustUserActivityLocked mShowing: " + mShowing + " mHidden: " + mHidden);
        boolean enabled = !mShowing || mHidden;
        mRealPowerManager.enableUserActivity(enabled);
        if (!enabled && mScreenOn) {
            // reinstate our short screen timeout policy
            pokeWakelock();
        }
    }


Posted by 삼스
Android/정리2010. 1. 6. 23:01
http://learnandroid.blogspot.com/2008/01/run-android-application-from-command.html

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.iftitah.android.contact">
  <application android:icon="@drawable/icon">
   <activity class=".Contact" android:label="@string/app_name">
    <intent-filter>
    <action android:value="android.intent.action.MAIN" />
    <category android:value="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>
 </application>
.
.
</manifest>

위와 같이 activity가 정의되어 있을 때... 아래와 같이 실행하면 됨

am start -a android.intent.action.MAIN -n
com.iftitah.android.contact/com.iftitah.android.contact.Contact
Posted by 삼스
Android/정리2009. 12. 9. 17:55
API Level : 6

Android 2.0.1은 android handset에 적용가능한 minor platform release이다.
minor API change, bug-fixes, framework behavioral의 변경이 되었다. framework에 대한 변경은  Framework API 를 참조하라.

Built-in app로 Sync Tester app가 추가되어 thirdparty sync adapter의 테스트를 돕는다.

API 변경 요약
  • quickContactBadgeStyle* 속성이 QuickContactBadge에 추가됨. -> style을 지정가능
  • ACTION_CONFIGURATION_CHANGED를 받기 위해 manifest에 기술할 필요 없으며 run-time에 registerReceiver()로 하면 됨
Framework관련 behavior변경 요약

블루투스
  ACTION_REQUEST_ENABLE과 ACTION_REQUEST_DISCOVERABLE의 리턴값 변경
  • ACTION_REQUEST_ENABLE이 성공하면 RESULT_OK를 사용자가 취소하면 RESULT_CANCELED를 리턴함
  • ACTION_REQUEST_DISCOVERABLE은 사용자가 취소하거나 BT가 enable상태가 아니면 RESULT_CANCELED를 리턴함.

Contacts
  ACTION_INSERT intent는 해당 contact가 더이상 존재하지 않으면(not persist) RESULT_CANCELED를 리턴한다.

Bug fixes
  일부 framework API의 버그를 수정함.

Resource  
  API level에 따른 app resource를 잘못 로딩하는 경우 수정됨. ex) drawable-v4는 API level4이상에서만 로드함.

Contacts
  ACTION_INSERT intent가 Contacts API로 생성한 요구에 대해 적절한 종류의 URI를 리턴함.

Others
  getCallingPackage()가 process명보다 package명으로 리턴함.

API differences report

For a detailed view of API changes in Android 2.0.1 (API Level 6), as compared to API Level 5, see the API Differences Report. Note that this difference report compares only to the most recent API Level, and there are few changes, so to see changes introduces in Android 2.0 (API Level 5), see the API Differences between 4 and 5.









Posted by 삼스