2011 안드로이드 개발자 랩

구글코리아에서 개최하는 2011 안드로이드 개발자 랩에 참석하고 되었습니다.

Android를 가지고 개인적으로 필요한 앱을 만들어 사용을 하고 있으며 이를 안드로이드 마켓에 올려 공유하고 있습니다. 최근에도 여러가지 앱을 조금씩 작성을 하고 있는데 이번 개발자 랩에서 "허니콤"에 대해서 좀 더 많은 사항을 알고 싶습니다.

20011 안드로이드 개발자 랩은 초청(?) 받은 사람만 참석할 수 있는 랩 입니다.
 

Posted by 산사랑

2011/09/16 21:38 2011/09/16 21:38
, ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/355

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/355

Leave a comment
[로그인][오픈아이디란?]
안드로이드의 연락처 검색이 불편하여 2010년부터 연락처 검색 (SmartSearch) 앱을 만들어 배포하고 있습니다.

최근 Android가 버전업이 되고 새로 안드로이드 폰이 나오면서 연락처 검색 (SmartSearch) 앱의 기능 중 "연락처 보기" 화면이 제대로 표시되지 않는 스마트폰이 생기고 있습니다. 그래서 "연락처 보기"에서 연락처를 보여 주는 방식을 변경 하였습니다.

기존 방식
//--- RAW_CONTACT_ID로 연락처 조회 (예전 방법)
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + String.valueOf(contact.getId())));
startActivity(intent);


새로 변경한 방식

//--- CONTACT_ID로 연락처 조회

intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contact.getContactId()));
startActivity(intent);


연락처 검색을 위해서 ContactsContract.Data를 사용 했었는데
여기서 직접 ContactsContract.Contacts의 CONTACT_ID를 구할 수 있는
방법이 없어서 RAW_CONTACT_ID를 사용 했었습니다.

그런데 최근에 정상 동작하지 않는 스마트폰이 있어서
해결 방법을 찾다 보니 Android가 업그레이드 되어 쉽게 CONTACT_ID를
구할 수 있어서 CONTACT_ID로 연락처를 조회하도록 변경 하였습니다.
 
오픈소스 비즈니스 컨설팅

Posted by 산사랑

2011/04/24 01:07 2011/04/24 01:07
, , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/328

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/328

Leave a comment
[로그인][오픈아이디란?]
Android에서 JSON 데이터를 송수신하기 위해서 HttpURLConnection을 사용하여 만든 함수 입니다.

  • serverURL : JSON 요청을 받는 서버의 URL
  • postPara : POST 방식으로 전달될 입력 데이터
  • flagEncoding : postPara 데이터의 URLEncoding 적용 여부
  • 반환 데이터 : 서버에서 전달된 JSON 데이터

    public static String getJson(String serverUrl, String postPara, boolean flagEncoding) throws Exception {
        URL url = null;
        HttpURLConnection conn = null;
        PrintWriter postReq = null;
        BufferedReader postRes = null;
        StringBuilder json = null;
        String line = null;
        
        json = new StringBuilder();
        try {
            if (flagEncoding) {
                postPara = URLEncoder.encode(postPara);
            }
            
            url = new URL(serverUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "text/plain");
            conn.setRequestProperty("Content-Length",
                                                       Integer.toString(postPara.length()));
            conn.setDoInput(true);
            
            postReq = new PrintWriter(
                              new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
            postReq.write(postPara);
            postReq.flush();
            
            postRes = new BufferedReader(
                             new InputStreamReader(conn.getInputStream(), "UTF-8"));
            while ((line = postRes.readLine()) != null){
                json.append(line);
            }
            conn.disconnect();
        } catch (MalformedURLException ex) {
            throw new Exception(ex.getMessage());
        } catch (IOException ex) {
            throw new Exception(ex.getMessage());
       } catch (Exception ex) {
            throw new Exception(ex.getMessage());
       }
        return json.toString();    
    }


Posted by 산사랑

2011/03/08 00:40 2011/03/08 00:40
, , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/304

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/304

Leave a comment
[로그인][오픈아이디란?]
임직원 정보, 동호회 인명록 등을 관리할 수 있는 SmartContact을 안드로이드 마켓에 올려 두었습니다.

데모 (reader) 사용자로 연락처 조회를 데모 (writer) 사용자로 연락처 등록 및 수정을 테스트해 볼 수 있습니다.

SmartContact 개요

스마트 연락처(SmartContact)는 임직원 정보, 동호회 인명록, 동문회 회원 정보 등의 공용 연락처를 클라우드 기반으로 관리 합니다. 관리자(writer) 권한을 가진 사용자가 연락처 정보를 등록하면 사용자(reader) 권한을 가진 사용자가 해당 연락처를 공유할 수 있습니다. 클라우드는 Google App Engine을 사용 하였으며, 다수의 클라우드를 등록하여 사용할 수 있는 구조로 되어 있습니다. 현재는 Default 클라우드만 사용이 가능하지만 자신만의 Google App Engine을 설정하여 사용할 수 있습니다.

  • 스마트 연락처 QRCode
  • market://details?id=com.jopenbusiness.android.smartcontact
  • Android 폰에서 QRCode Reader (스캐니, 다음 등)로 아래 QRCode를 읽어 설치할 수 있습니다.

그림:Qrcode SmartContact.png

  • SmartContact을 위한 Cloud 서비스
  • Google App Engine for Java로 구현된 SmartyContact 클라우드 서비스와 연동하여 연락처 정보를 관리함
  • 스마트 연락처 Screen

그림:SmartContact 01.png 그림:SmartContact 02.png

사용자 매뉴얼

  • "+" 버튼 : 현재 설정에서 지정되어 있는 Cloud에 연락처(Contact)를 추가 합니다.
  • "검색" 버튼 : 이름, 전화번호, 이메일, 주석 등으로 연락처를 검색 합니다.
  • 목록에 표시되는 항목 선택
  • 연락처의 상세 화면을 표시 합니다.
  • 연락처의 상세 화면에서 핸드폰으로 전화걸기, 문자 메시지 보내기, 회사로 전화걸기, 이메일 보내기를 할 수 있습니다.

Context 메뉴 (목록에 표시되는 항목을 오래 누르면 표시되는 메뉴)

  • 핸드폰으로 전화걸기
  • 문자 메시지 보내기
  • 회사로 전화걸기
  • 이메일 보내기
  • 연락처 수정
  • 선택한 연락처에 대한 수정 권한이 있으면, 연락처 수정 화면을 표시 합니다.
  • 연락처 삭제
  • 선택한 연락처에 대한 삭제 권한이 있으면, 연락처를 삭제 합니다.
  • 물리적으로 삭제되지는 않고 삭제 flag만 설정됩니다.

메뉴 (핸드폰에 있는 메뉴 버튼을 누르면 화면 하단에 표시되는 메뉴)

  • 동기화 : 등록된 모든 Cloud에 대해서 연락처 동기화를 진행 합니다.
  • 클라우드 선택 : Default Cloud를 선택할 수 있는 화면을 표시 합니다.
  • 설정 : Default로 선택된 Cloud의 정보를 설정하는 화면을 표시 합니다.
  • 정보 : SmartContact의 앱 정보 및 작성자 정보를 표시 합니다.

  • 마스터 클라우드 URL
  • 클라우드 명을 확인할 마스터 클라우드의 URL 입니다.
  • 현재는 smartycontact.appspot.com 만 존재 합니다.
  • 클라우드 명 : Cloud별로 유일한 ID
  • 이메일 : 클라우드 명으로 구분되는 Cloud에서 로그인 ID
  • 비밀번호 : 클라우드 명으로 구분되는 Cloud에서 로그인 ID에 해당하는 암호
  • 클라우드 동기화 정보
클라우드 명, 이메일, 비밀번호를 가지고 마스터 클라우드에서 확인한 클라우드의 상세 정보
  • 클라우드 URL : 클라우드가 있는 곳의 URL
  • 서비스 : 클라우드에서 사용할 서비스 명, 하나의 클라우드에는 여러개의 서비스가 존재 합니다.
  • 권한 : reader. 읽기 권한, writer. 쓰기 권한, admin. 관리 권한
  • 연락처 동기화 일자 : 연락처를 최종적으로 동기화한 일자를 보여 줍니다.
  • 삭제된 연락처 보기 : true이면 삭제 flag가 표시된 연락처도 보여 줍니다.

메뉴 (핸드폰에 있는 메뉴 버튼을 누르면 화면 하단에 표시되는 메뉴)

  • 클라우드 확인
  • 클라우드 명, 이메일, 비밀번호로 Cloud 동기화 정보를 가져 옵니다.
  • Default로 선택된 Cloud가 있을 경우, 해당 Cloud 정보를 수정 합니다.
  • Default로 선택된 Cloud가 없을 경우, 새로운 Cloud 정보를 등록 합니다.
  • 클라우드 선택 : Default Cloud를 선택할 수 있는 화면을 표시 합니다.
  • 데모 (reader) : 설정 정보를 reader 권한을 가진 데모 사용자로 설정하고 "클라우드 확인"을 합니다.
  • 데모 (writer) : 설정 정보를 writer 권한을 가진 데모 사용자로 설정하고 "클라우드 확인"을 합니다.
  • 정보 : SmartContact의 앱 정보 및 작성자 정보를 표시 합니다.

  • "+" 버튼 : 새로운 Cloud를 등록하는 화면을 표시 합니다.
  • "검색" 버튼 : 클라우드 명, 서비스, 이메일 등으로 Cloud를 검색 합니다.
  • 목록에 표시되는 항목 선택 : Cloud의 상세 화면을 표시 합니다.

Context 메뉴 (목록에 표시되는 항목을 오래 누르면 표시되는 메뉴)

  • 클라우드 선택 : 선택한 Cloud를 Default Cloud로 지정 합니다.
  • 삭제 : 선택한 Cloud를 삭제 합니다.
  • 연락처 초기화 : 선택한 Cloud에 해당하는 연락처를 핸드폰에서 모두 삭제 합니다.
  • 연락처 동기화 : 선택한 Cloud에 대해서 연락처 동기화를 진행 합니다.

메뉴 (핸드폰에 있는 메뉴 버튼을 누르면 화면 하단에 표시되는 메뉴)

  • 연락처 초기화 : 등록된 모든 Cloud에 해당하는 연락처를 핸드폰에서 모두 삭제 합니다.

  • 스마트 연락처 버전 x.xx.xxx
  • 스마트 연락처의 현재 버전을 표시 합니다.
  • 선택시 브라우저에서 스마트 연락처의 홈페이지(위키)를 표시 합니다.
  • 선택시 브라우저에서 스마트 연락처 작성자의 홈페이지를 표시 합니다.
  • android(골뱅이)jopenbusiness.com
  • 선택시 스마트 연락처 작성자에게 메일을 보낼 수 있습니다.

*** 참고 문헌 ***

Posted by 산사랑

2011/03/02 20:09 2011/03/02 20:09
, , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/313

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/313

Leave a comment
[로그인][오픈아이디란?]
Android는 Java로 되어 있어 Java에서 제공하는 기능을 사용하여 Thread를 구현할 수 있습니다. 그러나, 안드로이드 화면의 각 요소(View)에 정보를 표시한다든지 하는 UI와 관련된 작업을 하는 경우에는 여러가지 제약 사항이 따릅니다.

Google에서는 AsyncTask라는 것을 제공하여 Android에서 UI 작업과 관련된 Thread의 구현을 손쉽게 할 수 있도록 지원 합니다.


  Thread with AsyncTask


UI Thread를 구현하기 위해서는 해당 Thread가 Activity에서 구현이 되어야 하며, 주고 받는 인자들의 타입이 일치 하여야 합니다. 아래 설명에서는 서로 일치해야 하는 인자들의 경우에는 동일한 색으로 표시를 해서 구분 합니다.

* AsyncTask 호출 구현
private Activity activity = null;

activity = this;
(new theAsyncThread()).execute(para1, para2, para3);


*AsyncTask 구현
private class theAsyncThread extends AsyncTask<String, String, String> {
    //--- Thread를 시작하기 전에 호출되는 함수
    protected void onPreExecute() {
        if ((activity != null) && (activity.isFinishing() == false)) {
            Toast.makeText(activity, "Before thread", Toast.LENGTH_SHORT).show();
        }
        super.onPreExecute();
    }

    //--- Thread의 주요 작업을 처리 하는 함수
    //--- Thread를 실행하기 위해 excute(~)에서 전달한 값을 인자로 받습니다.
    protected String doInBackground(String... arg) {
        int argCnt = 0;
        
        argCnt = arg.length;
        if (argCnt != 3) {
            return "Error";
        }
        
        //--- onProgressUpdate(~) 실행하기 위해서는 아래 함수를 호출 합니다.
        publishProgress("Thread processing.");
        return "OK";
    }

    //--- doInBackground(~)에서 호출되어 주로 UI 관련 작업을 하는 함수
    protected void onProgressUpdate(String... progress) {
        if ((activity != null) && (activity.isFinishing() == false)) {
            Toast.makeText(activity, progress[0], Toast.LENGTH_SHORT).show();
        }
    }

    //--- Thread를 처리한 후에 호출되는 함수
    //--- doInBackground(~)의 리턴값을 인자로 받습니다.
    protected void onPostExecute(String result) {
        if ((activity != null) && (activity.isFinishing() == false)) {
            Toast.makeText(activity, "After thread", Toast.LENGTH_SHORT).show();
        }
        super.onPostExecute(result);
    }

    //--- AsyncTask.cancel(true) 호출시 실행되어 thread를 취소 합니다.
    protected void onCancelled() {
        super.onCancelled();
    }      
}    

*** 참고 문헌 ***


Posted by 산사랑

2011/01/14 20:40 2011/01/14 20:40
, , , , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/302

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/302

Leave a comment
[로그인][오픈아이디란?]

블로그 이미지

개인적인 글쓰기와 오픈소스 비즈니스 컨설팅 관련 글을 정리합니다. consult (골뱅이) jopenbusiness.com

- 산사랑

Archives

12명이 RSS를 구독하고 있습니다.

Site Stats

Total hits:
518974
Today:
222
Yesterday:
404

*** 방문자 통계 ***
0519 : (179)
0520 : (220)
0521 : (275)
0522 : (337)
0523 : (395)
0524 : (342)
0525 : (404)
0526 : (222)
7일간 총 방문자수 : 2152