Interesting/ANDROID | Posted by hyena0 2009. 9. 28. 23:23

[Android]ADC2 투표시작


  ADC2 투표시작

  안드로이드 개발자 챌린지 2의 투표가 시작되었네요.

  회색님의 블로그 내용처럼 안드로이드 마켓에서

  다운로드 받을 수 있고요.

  실행해보면 하나의 어플을 리뷰할 수 있게 되어 있습니다.

 


다운로드 받고 실행하려고 하면 평가하는 난이 있습니다.

Originality of Concept
Effective Use of the Android Platform
Polish and Appeal
Indispensability

평가하려니 좀 어렵기도 하네요.

해외와 환경이 맞지 않아 실행해도 무슨 말인지 이해하기 어려운 부분도 있는것 같네요.

해외 사용자에게 어필하려면 그들의 환경을 이해하는 것도 한몫할 것 같습니다.



Interesting/ANDROID | Posted by hyena0 2009. 8. 14. 21:32

[Android] 지도에 Path 그리기 확인


  지도에 Path 그리기 확인

  구글맵을 이용하는 운전 경로를 찾아주는 코드가

  대만의 블로거가 포스팅한 내용을 참조해서 작성해 보았습니다.

  주요한 내용은 두 지점의 위도, 경도의 Geo 정보만 있다면

  구글맵에서 KML 파일을 가져 올 수 있고, 

  KML 파일을 가져와서 Parsing 하여 경로의 정보를 가지고

  Overlay 클래스를 이용하여 지도에 겹쳐서 그린다는 내용입니다.

  예) http://maps.google.com/maps?f=d&hl=en&saddr=25.04202,121.534761&daddr=25.05202,121.554761&ie=UTF8&0&om=0&output=kml

  전체 소스는 링크된 사이트로 가시면 볼 수 있으니 붙이지 않습니다.

  다만 테스트를 해보면 나와있는 지점에 대한 Path 는 확인되나

  한국의 특정지점에 대해 입력하면 동작하지 않는 것을 알 수 있습니다.

  수정한 코드가 오류인지 확인해 보았으나 그렇지 않고,

  구글맵에서 한국지도에 대한 Path 정보를 KML파일로 제공하지 않는 것 같습니다.

  그래서 한국지도의 두지점에 대한 정보를 입력하면 KML 파일의 크기가 "0" byte 라는 것을 알 수 있습니다.

  아래의 확인결과는 안드로이드의 구글맵이 GPS 정보가 제대로 안잡히면 마운틴뷰로 설정되게 되어 있는데,

  그 근방에 대해 마커를 터치할때 마다 Path 를 표시하게 한 결과 입니다.



  소스코드는 정상이었으나, 한국 지도에는 아직 동작하지 않는 것 같네요.

  그리고 그 기준은 정확히 확인해 보진 않았지만, 장거리에서도 KML 파일이 정상적으로 동작하지 

  않는 것 같습니다. 미국 기준으로 몇개의 주를 걸치도록 지도에 입력을 해보니 마커만 표시되고

  Path는 그려지지 않네요. 







  Camera와 OpenGL 동시에 표시하기

  안드로이드에서 카메라와 OpenGL을 동시에 표시하는 

  것을 구현하려고 했더니 잘안되어서 검색을 좀 해봤습니다. 

  해당 이슈는 이미 Google groups 에서 논의되었었는데

  
  제목으로 검색하시면 찾을 수 있습니다.

  제가 처음 시도한 것처럼 카메라 Preview 를 먼저 보이게 하고

  투명한 배경의 OpenGL 화면을 보이게 하려고 했는데

  카메라만 보인다는 내용입니다.

  저역시 카메라만 보이는 것을 확인할 수 있었는데,

  Julius 라는 사람이 쓴 답글을 보면 순서를 거꾸로 하여

  OpenGL을 먼저하고 나중에 카메라를 더하라는 것이 있었습니다.

  그렇게 해보니 신기하게도 카메라 영상과 OpenGL 이 겹쳐져 나오더군요.

  <<디바이스 실행화면>>



  아래의 코드대로 해보시면 아시겠지만, 1.5 버전의 에뮬레이터에서

  투명한 배경이 동작하지 않는 것을 확인했습니다. 

  제가 설치한 에뮬레이터의 버전 문제일지 모르겠으나, 투명이 아니라 

  백색화면에 그래픽 객체는 나오지 않더군요. 

  또다른 구글그룹스의 내용에는 멀티 SurfaceView 를 권장하지 않는다고

  안드로이드 프레임웍 엔지니어가 답글을 달았군요.

  코드는 Cube.java 와 CubeRenderer.java 를 참조하고 있습니다.

  public class camGL extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        requestWindowFeature(Window.FEATURE_NO_TITLE);

        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        

        Preview mPreview = new Preview(this); 

        

        mRenderer = new CubeRenderer(true);

        

        mGLSurfaceView = new GLSurfaceView(this);

        //translucent

        mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);

        mGLSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888);

        mGLSurfaceView.setRenderer(mRenderer);

        

     //OpenGL 먼저 표시하기

        setContentView(mGLSurfaceView); 

     //그 다음 카메라 표시하기

        addContentView(mPreview, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        

    }

    

    private GLSurfaceView mGLSurfaceView;

    private CubeRenderer mRenderer;


    @Override

    protected void onResume() {

        super.onResume();

        

    }


    @Override

    protected void onPause() {

        super.onPause();

        

    }

    

}

//////////////////////////////

// camer preview

////////////////////////////

class Preview extends SurfaceView implements SurfaceHolder.Callback { 

    SurfaceHolder mHolder

    Camera mCamera

    

    boolean mPreviewRunning = false;

    

    Preview(Context context) { 

        super(context); 

        mHolder = getHolder(); 

        mHolder.addCallback(this); 

        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

        

    } 


    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera c) {

            mCamera.startPreview();

        }

    };

    

    public void surfaceCreated(SurfaceHolder holder) { 

        mCamera = Camera.open(); 

        try{

        mCamera.setPreviewDisplay(holder);

         if (false) throw new IOException(); 

        }catch (IOException e){

        //do something

        }

    } 


    public void surfaceDestroyed(SurfaceHolder holder) { 

        mCamera.stopPreview();

        mPreviewRunning = false;//// added

        mCamera = null

    } 


    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

     if (mPreviewRunning) {    ///added

            mCamera.stopPreview();

        }

    

        Camera.Parameters parameters = mCamera.getParameters(); 

        parameters.setPreviewSize(w, h); 

        mCamera.setParameters(parameters);

        mCamera.startPreview(); 

        //

        try{

        mCamera.setPreviewDisplay(holder);

         if (false) throw new IOException(); 

        }catch (IOException e){

        //do something

        }

        mCamera.startPreview();

        mPreviewRunning = true///added

    } 


}