블로그 이미지
JoyfulLife

공지사항

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

bada 에서 핸드폰 전화번호 알아내기.

2010.10.25 22:59 | Posted by JoyfulLife
권한
<Privileges>
        <Privilege>
            <Name>SYSTEM_SERVICE</Name>
        </Privilege>
    </Privileges>

         String value;

         result r = E_SUCCESS;

         String key(L"PhoneNumber");

         r = SystemInfo::GetValue(key, value);


         AppLog("%S",value.GetPointer());

바다는 권한 설정하는 부분이 불편하다. text로 입력해야 하니깐..


신고

'Bada' 카테고리의 다른 글

Using Arraylist with Object  (0) 2010.11.08
To get all contact in the Bada  (0) 2010.10.26
bada 에서 핸드폰 전화번호 알아내기.  (0) 2010.10.25
바다에서 post 사용하기  (0) 2010.10.16
Bada 1.1.0b1 공개  (0) 2010.10.12
Bada 에서 Json 사용  (0) 2010.10.03

바다에서 post 사용하기

2010.10.16 21:18 | Posted by JoyfulLife
get방식에서 급하게 post로 변경을 해야 할 일이 생겼다. 각종 예제를 찾았지만 제대로 동작을 하지 않았다. 처음에 찾은 사이트는
http://forums.badadev.com/viewtopic.php?f=6&t=345

이 사이트였다. 처음에는 무슨 말인지 몰랐지만 1시간정도 보니 알게 되었다.

더 자료를 찾으면서 바다 sdk에 example 폴더에 httppostexample 이 있다는 것을 알게 되었다.

그것을 바탕으로 소스를 만들었지만 돌아가지 않았다.

결국 안되는 원인을 찾았다. 그것은
pHeader->AddField(L"Content-length", L"12");
이 부분이었다. 첫번째 참조한 사이트에도 이 말이 있었다.

example 부분과 내 소스를 보면 대충 감이 올 것이다.

우선 돌아가는데 의의를 둔다. 정확하게 파악을 해야 할텐데..에휴..ㅡㅡ

__pHttpSession = new HttpSession();
    __pHttpSession->Construct(NET_HTTP_SESSION_MODE_NORMAL, pProxyAddr, hostAddr, null);

    // Open a new Http Transaction within the HttpSession
    pHttpTransaction = __pHttpSession->OpenTransactionN();

    // Add Listener
    // OnTransactionCompleted() will be called when response is arrived
    pHttpTransaction->AddHttpTransactionListener(*this);

    // Get Http Request
    HttpRequest* pHttpRequest = pHttpTransaction->GetRequest();

    // Set HTTP Method
    pHttpRequest->SetMethod(NET_HTTP_METHOD_POST);

    // Set Uri
    pHttpRequest->SetUri(uri);

    // Fill HTTP Header
    pHeader = pHttpRequest->GetHeader();
    //Add a chunked field to header.
//    pHeader->AddField(L"Transfer-Encoding", L"chunked");
    pHeader->AddField(L"Content-length", L"12");
    pHeader->AddField(L"Content-Type", L"application/x-www-form-urlencoded");

    //Enable OnTransactionReadyToWrite()
    pHttpTransaction->EnableTransactionReadyToWrite();

    //Set a Body to Request.
    ByteBuffer reqBody;
    const char* pBodyArray = "userid=rufia";
    int len = strlen(pBodyArray);
    reqBody.Construct(len);
    reqBody.SetArray((byte*)pBodyArray, 0, len);
    reqBody.Flip();
    pHttpRequest->WriteBody(reqBody);

    // Submit a request with chunked mode
    pHttpTransaction->Submit();


신고

'Bada' 카테고리의 다른 글

Using Arraylist with Object  (0) 2010.11.08
To get all contact in the Bada  (0) 2010.10.26
bada 에서 핸드폰 전화번호 알아내기.  (0) 2010.10.25
바다에서 post 사용하기  (0) 2010.10.16
Bada 1.1.0b1 공개  (0) 2010.10.12
Bada 에서 Json 사용  (0) 2010.10.03
TAG bada, POST

Bada 1.1.0b1 공개

2010.10.12 23:04 | Posted by JoyfulLife
10/5 일에 Release 되었다.
바뀐 내용으로는

    • Application Wizard
    • Resource Explorer
    • UI Builder
    • Resource Monitor
    • Privilege Checker
  • SDK
    • Header files
    • Libraries
    • Simulator
    • Tool-chain
  • Language packs
    • Language pack 1
  • Documents
    • Release Notes
    • Tutorials
    • API Reference (Eclipse plugin)
    • Developer Guide (Eclipse plugin)
    • Application UI Guide (Eclipse plugin)
    • Device-dependent Features
    • Application Migration Guide from bada 1.0.0 to 1.1.0
  • Sample Applications
  • 이런 부분인다.
    꽤 많이 바뀌었다.

    좀 더 사용해봐야 할듯.

    알려진 이슈.

    IDE 바뀐 부분:
    1.IDE 가 에러 메세지를 보여줄 수 있다. 어플이 타겟 디바이스에 올라갔을 때. invalid hex digit 라고 보일 것이고 리부팅된다.  usb 에러라면 usb 연결이 끊어질 것이다.
    2.비트맵 디렉토리가 바뀌어싿. 이 말은 너는 비트맴을 다시 할당해야 한다는 것이다.
    3.step return 은 디버깅할 때 제대로 동작 안 할 수 있다.
    4.step into 가 타겟 디버깅 할 때 제대로 동작 안 할 수 있다.
    5.마우스가 name space 를 가리키면 broken tooltip 이 보일 것이다.

    SDK
    1.바다 SDK가 깔린 곳은 영어여야 한다. 스페이스를 포함할 수 없다.
    2. 64비트버전은 시뮬레이터가 언스테이블 하다.
    3.시뮬레이터 처음 가동은 시간이 걸린다.
    4.메인 메뉴에서 시뮬레이터에서 돌아가지 못한다.
    5.

    Namespaces
    Osp::Base
     1.API가 추가되었다.
    2.이벤트핸들러에서 타이머를 지운다면 그 액션은 마지막이 되어야 한다.(이것은 return 전에 일어나야 한다.)
    Osp::Content
    1.저장매체를 제거해도 업데이트와 제거 파일이 성공한다. 업데이트와 제거 후에 저장매체가 붙어 있는지 확인해라
    2.WebServer 에서 다운로드 페일이 일어나도 mime type 의 응답을 하지 않는다. ContentTransfer::Download() 와 DownloadToBuffer() 메서드가 적절하게 일어나지 않을 것이다.

    Osp::Graphics
    1.메모리 캔버스가 자유롭게 위치되지 못한다. Canvas::SetPosition 과 Canvas::Construct(rect) 가 적절히 동작하지 않을 것이다. (top left corner 는 항상 위쪽 왼쪽 코너에 고정되어 있다.)

    Osp::Locations
    1.deCarta map 서비스가 모든 나라를 커버하지 못한다. 증가할 것이다.
    2.deCarta map 이 위성 서비스를 제공하지 못한다.
    3.deCarta map 의 처음과 마지막은 잘못된 정보일 때가 있다.
    4.Map tiles 과 다른 이미지 세팅은 함께 보여질 수 있다.
    5.WVGA 가 WQVGA 위에서 돌아갈 때
     NativeMapInfoWindow 가 적절하게 나오지 못할 수 있다.
     NativeMapMarker::SetImage() 함수는 잘못된 위치에서 디스플레이된다.

    Osp::Media

    1.GPS정보가 없는 이미지 캡쳐: Osp::App::AppControl 을 이용해서 EXIF 필드를 고쳐야지 GPS 정보가 저장이 된다.

    2.사운드강화효과(SRS)같은 것으로 인해 clippling 현상이 일어날 수 있다.

    3.rotate가 카메라 프리뷰에서 안 먹을 때: 카메라 디바이스에서 이것을 관린한다. 이것은 프리뷰와 실제 켭쳐된 데이타가 안 맞을 때 일어난다. 이것을 고칠려면 카메라에서 이미지를 받고 난 후 방향을 고쳐야 한다. 이것은 이미지를 바꾸던가 EXIF 정보를 바꾸면 된다.

    4.OpenUrl 이 asynchronously 하게 일어나면 GetDuration 은 적절하게 동작하지 않는다.


    Osp::Social

    1. MMS가 여러 사람에게 보내졌을 때 로그에는 한 사람만 보낸것으로 나온다.


    Osp:Ui

    Control

    1.control의 background 스타일이 BACKGROUND_TYLE_NONE일 때 group style property (UI)가 세팅되어서는 안된다. group style property of UI 가 세팅되기 위해서는 control's backgorund style 이 반드시 BACKGROUN_STYLE_DEFAULT가 되어야 한다.

    2.그룹리스트가 300*250, 150*125 보다 작을 때는 scroll bar가 나타나지 않는다.

    3.List 생성자가 LIST_STYLE_NUMER 일때는 최고 99개까지만 담을 수있다.

    4.FLV는 WQVGA 디바이스 지원된다. 그러나 content는 반드시 켜쟈야 한다. 그래야만 CPU가 작은 속도에서 디바이스가 돌아간다.

    5.OverlayPanel child UI control 은 분명하지 않을 수 있다. Soft-key를 조상으로 가지고 있을 때, 만약 그들의 위치가 Form's  Softkey's 경계와 겹친다면.

    6.list control에서 다른 control로 포커스가 갔을 때 onItemStatChanged() 메서드가 2번 불린다.

    7. SlidableGroupedList 는 아이템 요소들의 포커스 이동을 지원하지 못한다. (왼쪽 오른쪽 directional Keys를 사용할때)

    8.in SlidableGoupedList 와 SlidableList 에서 어떤 API핸들링 아이템은 적절하게 동작하지 않는다.

    9.아이템의 텍스크 컬러 바꾸는 것은 동작하지 않을 수 있다.

    10. RemovedAllCheckedItemsAt() 는 모든 체크된 아이템을 지운다.

    11. 자동 변환 feature (with FlashContol)은  그 컨트롤은 반드시 top-left quadrant 에 위치해야 한다.

    Osp::Uix

    Face Detection and Recognition

    1.많은 FaceRecognizer 와 FaceDetector 인자는 , 스틸 이미지와 비디오의 모든 체인지는 존재하는 인자에 의해 글로벌하게 영향을 받을 수 있다.

    2.MeasureSimilarity함수가 FaceRecognizer 인자가 ExtractFaceInfoFromStillImageN() 와 ExtractFaceInforFromVideoSteramN() 함수를 부르기 전에 불린다면 MeasureSimilarity()는 0을 리턴한다. argument가 올바르다면..... 같은 상황에서 IsMatching() 함수가 false를 리턴할 때..

    Haptice

    1.윈도우 비스타와 윈7 개발자는 Immersino TouchSense SDK 3.x 를 인스톨해야 한다.


    Osp::Web

    1. Web Control 는 Adobe flash plugin 을 지원하지 않는다.

    2. Web::Pause()와 Web::Resume() 함수는 적절하게 동작하지 않는다.

    3.ILoadIngListener::OnHttpAuthenticationCanceled() 이벤트는 잘못된 시간에 실해오딘다. 그것은 진짜 OnLoadingCompleted() 후에 온다. 비록 그것이 이전에 와야 하지만..


    신고

    'Bada' 카테고리의 다른 글

    Using Arraylist with Object  (0) 2010.11.08
    To get all contact in the Bada  (0) 2010.10.26
    bada 에서 핸드폰 전화번호 알아내기.  (0) 2010.10.25
    바다에서 post 사용하기  (0) 2010.10.16
    Bada 1.1.0b1 공개  (0) 2010.10.12
    Bada 에서 Json 사용  (0) 2010.10.03

    Bada 에서 Json 사용

    2010.10.03 18:03 | Posted by JoyfulLife
     바다에서 Json 을 사용할 일이 있어서 라이브러리를 찾아보았다.

    Jsoncpp 라는 것을 사용해봤지만 iostream 과 NULL 에 대한 것 때문에 실패했다.

    YAJL 란 것을 사용해보았다. 이것도 실패했다. 사용방법을 몰라서 실패했다.

    마지막으로 찾은 것이
    http://hr-hr.facebook.com/note.php?note_id=118084368223554

    여기서 찾은 json-c 이다. 이건 성공했다.

    파싱이 간단했다.

    char text1[]="{\"id\":\"1\",\"userid\":\"rufia\",\"userName\":\"Wuseok Jang\"}";
    json=cJSON_Parse(text1);
    char * name = cJSON_GetObjectItem(json,"id")->valuestring;

    이런 식으로 하면 name에 1 이 나온다.


    신고

    'Bada' 카테고리의 다른 글

    Using Arraylist with Object  (0) 2010.11.08
    To get all contact in the Bada  (0) 2010.10.26
    bada 에서 핸드폰 전화번호 알아내기.  (0) 2010.10.25
    바다에서 post 사용하기  (0) 2010.10.16
    Bada 1.1.0b1 공개  (0) 2010.10.12
    Bada 에서 Json 사용  (0) 2010.10.03
    TAG bada, JSON

    알림 메세지 , "지우기" 로 못 없애기

    2010.09.24 20:14 | Posted by JoyfulLife

         * 알림영역 선택시 어플 실행.

         * 알림영역 삭제는 어플 종료 이전에는 불가능 하도록 처리해야 .

         */

        private void notifyMessage() {

            String notiTitle = this.getString(R.string.app_name);

            String notiContent = this.getString(R.string.msg_notify_content);

            final NotificationManager notiMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

            Notification noti = new Notification(R.drawable.ic_notify, notiTitle , System.currentTimeMillis());

            noti.flags |= Notification.FLAG_NO_CLEAR;

           

            PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class),0);

           

            noti.setLatestEventInfo(this, notiTitle, notiContent, i);

           

            notiMgr.notify(NOTIFY_ID, noti);

        }


    이부분이 핵심이다.

    noti.flags |= Notification.FLAG_NO_CLEAR;


    이렇게 하면 프로세스 죽지 않는한 알림메세지가 안 죽는다.



    참조 사이트

    http://developer.android.com/reference/android/app/Notification.html#FLAG_NO_CLEAR


    http://overoid.tistory.com/25




    신고

    tab을 그림으로만 표현하기

    2010.09.21 09:58 | Posted by JoyfulLife

     final TabHost tabHost = getTabHost();

      iv = new ImageView(this);
      iv.setBackgroundResource(R.drawable.tab_starmain_interview_selector);
      tabHost.addTab(tabHost.newTabSpec(TAB_ID_STAR_MAIN_INTERVEW)
        .setIndicator(iv).setContent(
          new Intent(this, StarInterview.class)));

    신고
    TAG Tab

    NDK , 문서 번역, OVERVIEW.TXT

    2010.09.16 10:32 | Posted by JoyfulLife

    소개
    NDK 는 c/ c++ 로 컴파일된 파일을 어플리케이션 패키지로 넣을 수 있게 해주는 툴이다.

    중요한 점:
     1.5 이상의 플랫폼만 NDK를 쓸 수 있다.
    1.0, 1.1 는 ABI 와 툴체인의 변화로 제공되지 않는다.


    NDK 목표
     VM이  JNI 로 이식된 네이티비 코드를 당신의 어플이 사용할 수 있게 해준다.
     - 당신의 어플 소스 코드는 native 키워드를 선언해야 한다.
     native byte[] loadFile(String filePath);
    -  당신은 반드시 함수가 선언된 native shared library 를 제공해야 한다. 그것은 당신의 .apk에 패키징될 것이다. 그 라이브러리는 표준 유닉스 convention 으로 이름이 붙여질 것이다. . (lib<something>.so),. 그리고 표준 JNI entry point 를 가지고 있어야 한다. (libFileLoader.so)
    -당신의 어플은 정확하게 라이브러리를 로드해야한다. 예를 들자면,
     static{
    System.loadLibrary("FileLoader");
    }
     당신은 'lib'이란 것과 '.so' 를 사용해서는 안된다.


    NDK 는 안드로이드 sdk를 보완해주고 다음과 같은 점을 도와준다.
     1. JNI-compatible shared librarie(ARM cpu 에서 돌아가는 안드로이드 1.5 플랫폼이상) 을 생성
     2. shared libraried 를 적당한 당신의 어플리케이션 프로젝트에 복사해준다. 그것은 자동으로 당신의 final .apks 에 더해질 것이다
     3.나중의 NDK revision 때 우리는 native code 디버그 툴을 제공할 것이다. 그것은 원격 gdb connection을 통한 것이다. 그리고 soure/symbol 정보를 디버깅 해줄 것이다.

    NDK는 더 많은 것을 제공한다.
     1.리눅스 상이나, OS X , 윈도우(with cygwin) 에서 native ARm 바이너리를 생성할 수 있는 cross-toolchains(컴파일러, 링커, 기타.. )
     2..안드로이드를 도와주는 안정된 native APIs의 리스트들과 일치되는 system headers. 이것은 나중에 발매되는 플랫폼의 정의와 일치되는 것을 보장한다.
     이것은 docs/STABLE-APIS.TXT에 문서가 있다.
     중요한 점:
     다음 플랫폼의 업데이트와 release 때  많은 native system libraries 는 frozen 되지 않았다. 그리고 과감하게 바뀔 것이다. 또는 삭제될 것이다.
     3.빌드 시스템은 개발자가 short build files 을 쓸 수 있게 허용할 것이다. 빌드 시스템은 복잡한 toolchain/jplatform/cpu/ABI 들을 상대할 것이다. 다음 버전에의 NDK는 개발자의 build 파일을 변화를 요구하지 않는 더 많은 toolchains과 platform 시스템 인터페이스  를 제공할 수 있다.

    II. 안드로이드 NDK의 non-goals:
     NDK는 안드로이드에서 돌아가는 generic native code 를 쓰는 좋은 방법이 아니다. 특수하게, 당신의 어플ㄹ은 자바로 적혀져야 하고, 안드로이드 life-cycle 을 만족해야 한다. 
     
     그렇지만 복잡한 native codd안에서 적은 wrapper 형태로 시작과 끝내는 것을 해주는 것은 가능하다. 

     JNI를 좋게 이해하는 것은 필요하다. 왜냐하면 많은 동작이 개발자들에게 특정한 액션을 요구하기 때문이다. 공통 표준 네이티비 코드가 필요한 것이 아니다. 이것을 다음을 포함한다.
     -VM 객체의 내용에 바로 접근이 가능하지 않다. (포인트를 얻을 수 없기 때문이다)
     -명백한 레퍼런스 관리를 유구한다. (네이트브 코드가 VM 객체를 제어하기 위해서)

    NDK는 native api 와 라이브러리를 제공하기 위해서 시스템 헤더를 제공한다. 안드로이드 시스템은 많은 native shared libraries를 포함한다. 이것은 앞으로의 업데이트와 릴리스를 통한 변화를 위해서 잘 고려해야 한다.
     
     시스템 라이브러리는 앞으로 안정화된 NDK  API들의 세트에 더해질 것이다. 


    III. 연습
     이것은 당신이 어떻게 native code를 NDK로 빌드할 수 있는지 러프한 방법을 보여준다. 
     1. $PROJECT/jni/  폴더에 native sourece들을 넣는다. 
     2. $PROJECT/jni/Android.mk 를 쓴다. 이것은 NDK build system에게 당신의 소스를 설명해줄 것이다. 
    3 . 옵션: $PROJECT/jni/Application.mk 는 좀 더 자세하게 설명을 해준다. 이것은 APPLICATION-MK.TXT 문서를 봐라)
    4.$NDK/ndk-build 로 빌드시켜라. 당신의 프로젝트 파일에서 빌드해야 한다. 

    III.1 NDK 환경
     이전에는 build/host-setup.sh 로 빌드를 시켰지만 이번에는 제거되었다. 

    III.2 C, C++ 위치
     $PROJECT/jni/ 에 둬라. 
     $PROJECT는 당신 어플리케이션의 프로젝트 패스이다. 
     
     당신은 jni 폴더를 구성하는 것에 자유롭다. 당신은 pseudo-unique 이름들을(com.<mycompany.><myproject>)  사용하지 않아도 된다. 
     
     c, c++ 을 제공된다. 
     Android.mk 를 조정하면 다른 곳에 저장을 해도 된다. 

    III.3 Android.mk 빌드 script
     Android.mk 는 작은 빌드 스크립트 파일이다. 이것은 docs/ANDROID-MK.TXT 파일에 자세히 적혀 있다. 
     NDK 의 모듈은 다음이 따라 올 수 있다. 
    - a static library
    - a shared library
     
     당신의 Android.mk 에서 많은 모듈을 정의할 수 있다 

     NDK 는 다음의 빌드 스크립트를 찾을 것이다. 
     $PROJECT/jni/Android.mk

     만약 서브 디렉토리의 Android.mk 를 정의하고 싶다면 당신은 정확하게 탑레벨의 Android.mk 에 포함시켜야 한다. 
     (i.e include$(call all-subdir-makefiles)

    III.4 Application.mk 빌드 파일( 옵션)
     


     

    신고

    Enable or not, BroadcastReceiver

    2010.09.12 20:21 | Posted by JoyfulLife
     내가 WIFI를 끄거나 켤때 이것을 감지하는 BroadCastReceiver 를 찾아봤다.

    intentFilter filter=new IntentFilter();
    filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

    이런 식으로 하면 된다.

    블루투스를 찾아보았다.
    permission을 준 다음에
    (android.permission.BLUETOOTH)
     filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);

    이런 식으로 하면 된다.

    하지만 아직 GPS와 싱크 여부, 화면 밝기 조정, 화면 제한 시간  에 대한 Action 필터를 찾지 못했다.


    구글을 해본 결과 화며 제한 시간은 알 수 없다고 했다.
    (http://groups.google.com/group/android-developers/browse_thread/thread/94ec00933a7ee6d8#)

    GPS는 가능 할 것 같다. 좀 더 찾아봐야 겠다.
    신고

    4장 Exception verctor table 구성하기

    2010.08.11 21:17 | Posted by JoyfulLife
     Arm에서는 인터럽트와 예외를 처리하기 위해 exception vector table 을 둔다.
    모두 7가지로 구분한다.

    4.1 Arm의 exception 과 프로세서 동작 모드
    Data abort, FIQ, IRQ, Prefetch Abort , SWI, Reset, Undeined Instruction

    1.Data abort=segmentation fault(메모리 접근 오류)
    2.FIQ, IRQ, 외부 인터럽트
    3.Prefetch Abort 명령어 해석 실패, 명령어 읽다가 오류 발생
    4.SWI Software Interrupt 의 약자,  시스템 콜
    5.Reset 리셋
    6.Undefined Instruction 명령어가 존재 하지 않음

    7가지 동작모드
    Abort, FIQ, IRQ, SVC(Supervisor), System(SYS), Undefined(UND), USER(USR)

    ABT, FIQ, IRQ, SVC, UND 모드는 ARM에서 자동으로 변경되는 모드
    SYS와 USR 는 개발자가 소스코드에서 변경시켜 줌

    동작모드로 진행하는 방법은 cpsr 의 동작모드 필드의 값을 ARM코어나 개발자가 수정함으로써 이루어짐
    cpsr의 0-4번비트까지ㅡ이 값은 현재 프로세서의 동작 모드를 나타낸다.

    USER->시스템콜->SWI->SVC->USER

    키보드 입력은 IRQ로 처리


    4.2 ARM의 exception vector table
     ARM코어가 실행을 분기할 주소를 모아놓은 테이블

    작업 처리 순서
    exception 발생 -> exception 모드의 spsr에 cpsr을 저장함 -> exception모드의 lr에 pc값을 저장함 -> cpsr의 모든 비트를 변경하여, 해당 exception에 대응하는 프로세서 동작 모드로 진입함 -> pc에 exception 핸들러의 주소를 저장하여 해당 exception 에서 해야 할 일을 처리함

     마지막 핸드러의 주소를 pc에 옮길 때 우리는 핸들러의 주소를 모아 놓은 벡터 테이블을 사용할 것이다.


    나빌룩스는 부트로더를 수정해서 Software Interrupt 와 IRQ exception 만 처리
    Software Interrupt 시스템 콜을 구현하는데 필요함
    IRQ exception 외부입력 과 OS타이머를 작동하기 위해서 꼭 사용해야 하는 exception



    신고

    '운영체제' 카테고리의 다른 글

    4장 Exception verctor table 구성하기  (0) 2010.08.11

    쉽게 Dialog 만들기..

    2010.07.28 14:50 | Posted by JoyfulLife
    평소에 다이얼로그를 만들면셔 불편한 점이 있었다. 그것은 내가 원하는데로 디자인을 할줄 몰랐다는 것이다. 구글 오픈 소스를 보면서 액티비티를 이용해서 다이얼로그를 만드는 법을 알아냈다.


    @Override
        protected Dialog onCreateDialog(int id) {
            if (id == WELCOME_DIALOG) {
                mWelcomeDialog = new WelcomeDialog(this, this);
                mWelcomeDialog.setOnCancelListener(this);
                return mWelcomeDialog;
            } else if (id == GAME_OVER_DIALOG) {
                mGameOverDialog = new GameOverDialog(this, this);
                mGameOverDialog.setOnCancelListener(this);
                return mGameOverDialog;
            }
            return null;
        }

    public class WelcomeDialog extends Dialog implements View.OnClickListener {

        private final NewGameCallback mCallback;

        private View mNewGame;

        public WelcomeDialog(Context context, NewGameCallback callback) {
            super(context);
            mCallback = callback;
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setTitle(R.string.app_name);

            setContentView(R.layout.welcome_dialog);

            mNewGame = findViewById(R.id.newGame);
            mNewGame.setOnClickListener(this);

        }

        /** {@inheritDoc} */
        public void onClick(View v) {
            if (v == mNewGame) {
                mCallback.onNewGame();
                dismiss();
            }
        }
    }

    이 정도만 보면 어느 정도 이해는 가능할 것 같다. 좀 더 자세한 자료는 구글에서 DivideAndConquer 를 참조하자.


    신고

    티스토리 툴바