다음글 : 갤럭시 S 보호 필름 붙이고 인증샷

두둥 갤럭시 S
박스는 일단 지금까지 삼성 전자 제품에서 종종 보던 디자인인것 같다. 햅틱온 살 때도 저런 박스였던 것 같은데;;


박스를 열면 갤럭시S가 보인다. 생각보다 조금 큰 것 같다.
AMOLED, ANDROID, 1GHz, WIFI, DIVX HD란 글자가 보인다. 애플이랑 경쟁하는 관점에서 DMB도 같이 적어놔도 좋았지 않을까? 생각해본다.
DMB수신용 내장 안테나 사진을 못찍었는데 이젠 잃어버릴 일이 없을 것 같다 ㅠ_ㅠ


두께... 지금 쓰고 있는 햅팁온의 절반정도의 두께. 손에 쥐었을 때 느낌은 나쁘지 않다. 디자인 안목이 없어 뒤에 곡선이 어쩌고는 잘 모르겠다. 어디서 읽은 것 같긴 한데
어쨌든 옆면에 안테나를 두르진 않았다.


전면부 보호 필름 올때까진 저 글자들을 보면서 살아야 한다는 엄청난 문제가 있다 ㅠ_ㅠ

나머지들 뭐 그냥 원래 정리 정돈이란 걸 잘 몰라서;;

메뉴 화면 메뉴 이동은 나쁘지 않다. 1,2,3 세개의 화면이고 3에서 다시 1로 돌아간다. 이건 아직 적응이 안되서 그런가 헷갈린다.


바탕화면 7의 스크린으로 이루어져 있다.

카메라 와이프를 찍는 장면을 찍어보았다. 화질은 So Good


후면.


USB단자와 이어폰 단자가 있는 윗면. 고무로 단자를 가리는 걸 좋아하지 않았는데 USB단자는 여닫는 형태로 바뀌어 있다. USB단자에 USB 케이블을 연결해보았는데 다소 뻑뻑하다.

메뉴화면 1,2,3 ] 설정에서 어플리케이션 매니저에 들어가봤더니 어플들이 뜬다. 기본 어플들이 삭제가 가능한지 확인해보진 않았다.


액정 보호필름이 빨리 와야 할텐데;;

다음글 : 갤럭시 S 보호 필름 붙이고 인증샷

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
  1. 엔돌슨 2010.06.25 21:58 신고

    간지 납니다. 당신을 위한 준비는 끝났다. Super You!!!! 갤럭시 외계인!~~
    사진이 간지나게 잘나왔네요. 전 필름을 왜 안때셨나 했더니 보호 필름이 아직안온거네요. 아이팟 처음사고 보호필름 기다리다가 급한마음에 막눌러 쓴기억이나네요

    • 소혼 2010.06.25 22:40 신고

      감사합니다. 아무 생각없이 막 찍었습니다. 얼른 보호필름이 와야 할텐데요 ;; 필름에 큼직한 글씨들이 영 불편하네요 ㅎㅎ

SimpleCursorAdaptor와 ListView의 사용예
Activity를 MyList.java로 만들고 아래 코드들을 추가
DB는 단순하게 사용하였음


### xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView android:id="@+id/IndexList"
        android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</LinearLayout>

main.xml

### java

package com.yesum.listDBSample;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemClickListener;

public class MyList extends Activity {
    private static final String DATABASE_NAME = "sample.db";
    public static final String TABLE_NAME = "mytable";
    private static final String COLUMN_KEY_ID = "_id";
    private static final String COLUMN_NAME = "name";

    private ListView m_listIndex;
    private SQLiteDatabase mDatabase;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        m_listIndex = (ListView) this.findViewById(R.id.IndexList);
        m_listIndex.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
            }
        });
        //createDB();
        //insert("ryuan");
        //insert("yesum");
        //insert("dongsik");
        setAdaptor();
    }

    private long insert(String name) {
        if (mDatabase == null) {
            mDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
        }
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_NAME, name);
        return mDatabase.insert(TABLE_NAME, null, cv);
    }

    private void createDB() {
        // create sample DB
        if (mDatabase == null) {
            mDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
        }
        String createSQL = "CREATE TABLE " + TABLE_NAME + " (_id integer primary key, " +
            "name)";
        mDatabase.execSQL(createSQL);

    }

    private void setAdaptor() {
        if (mDatabase == null) {
            mDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
        }
        Cursor cursor = null;
        final CursorAdapter adaptor;
        String[] columns = new String[] {COLUMN_KEY_ID, COLUMN_NAME};

        cursor = mDatabase.query(TABLE_NAME, columns, null, null, null, null, null);
        adaptor = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1,
                cursor,
                new String[] {COLUMN_NAME},
                new int[] {android.R.id.text1}
                );
       
        m_listIndex.setAdapter(adaptor);
    }
}

MyList.java

  1. 2010.10.31 21:59

    비밀댓글입니다

    • 소혼 2010.10.31 16:06 신고

      상단 제 사진 밑에 Contact me 누르셔서 메일 주셔도 되구요.
      bunhere 앳 gmail.com으로 연락 주시면 됩니다.

  2. 2010.10.31 22:25

    비밀댓글입니다

에뮬레이터를 만들 때, 혹은 추후에 가상의 SDCARD를 만들었다면 그 안에 데이터를 넣을 수 있다.

1. 먼저 에뮬레이터를 실행시킨다.
    - 안드로이드 SDK 설치하기 참조
2. DDMS를 실행한다.
    우측 상단에 DDMS를 클릭한다. 만약 DDMS가 보이지 않는다면 아래 그림과 같이 Window에 Show View > Other를 선택하고 안드로이드의 DDMS를 선택하면 우측 상단에 DDMS가 나타난다.

3. sdcard를 선택하고 파일을 업로드한다.
   
DDMS를 선택하면 위와 같은 화면이 뜬다. File Explore에서 sdcard를 선택하고 우측 상단의 두 아이콘중 휴대폰 모양의 아이콘을 클릭한다.

반대로 sdcard의 파일을 꺼내려고 하면 디스켓 모양을 클릭하면 된다.

그러나 이방법을 사용하면 큰 파일을 올리기에 부적합하다. 올라가는 중간에 잘 끊어진다.
따라서, 어쩔수 없이 콘솔을 통해 업로드하는 방법을 썼다.

1. 먼저 [Window의 경우] 시작의 실행을 선택하고 cmd를 입력한다.
2. 안드로이드 sdk를 설치한 폴더로 이동한다. 정확히는 tools라는 폴더를 찾아야 한다.
3. 아래 명령을 실행한다.
    adb push [로컬파일 위치] /sdcard/[적절한 폴더 및 파일 명]

100메가 정도 업로드하는데 몇분 걸리는 것 같다.
경로는 /sdcard가 아니라 /mnt/sdcard 일 수도 있다. 정확한 경로는 DDMS의 File Explore가 보여주는 위치를 사용하도록 한다.
허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
  1. Eunah 2010.11.05 03:30 신고

    아 했다.. ㅠㅠ 힘들다 힘들어
    사진찍었던 GPS정보 위도 경도얻어오는거ㅋㅋㅋ
    내일 구글맵에 띠우는거 해야지
    아 뿌듯함 ㅋㅋㅋ 내일 보여줄게 !!
    안녕 잘자 ~~~~~~~~~~~~~~~~~~~~~~~

    • 소혼 2010.11.05 08:10 신고

      고생하누만. 새벽 3시까지 ㅋㅋ

      열심히 하고 글 정리해서 오빠한테 기고혀~
      블로그에 글 적을 시간도 요새 없어 ㅠ_ㅠㅠ

  2. Eunah 2010.11.05 03:33 신고

    오빠야ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    가상 SDcard 추가해서 데이터 넣는거
    블로그 돌아다니면서 찾다가 우연히 들어왔는데...

    메인사진에 왠 낯선분이 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
    오빠 블로그네 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    cmd 창에서 하는 것만 보다가 이거보니까 반갑네 ㅠㅠ

    • 소혼 2010.11.05 08:09 신고

      낯선 아니죠. 낯익은 맞습니다.
      프로그래밍 언어만 공부하지 말고 언어도 공부해!

      프로그래머도 화술에 능해야 면접에 안미끄러진다.

1. 설치 준비(Preparing for Installation)
    JDK와 이클립스를 다운로드한다.

    1. Download java sdk (JDK)
        http://java.sun.com/javase/downloads/index.jsp

    2. Download Eclipse with the Android Development Tools (ADT) Plugin
        http://www.eclipse.org/downloads/

2. SDK를 설치한다.(Installing the SDK)
    1. After downloading the SDK, unpack the .zip archive to a suitable location on your machine
        http://developer.android.com

3. 이클립스를 실행한다.
    workspace는 적당히 자신이 개발할 곳을 지정한다.
4. 이클립스에 안드로이드 플러그인을 설치한다.
    아래 그림과 같이 이클립스의 헬프를 클릭하여 새로운소프트웨어 설치를 클릭한다.

    아래와 같은 창이 뜬다. 여기서 Add를 눌러준다.
안드로이드 플러그인을 설치하려면 아래 그림과 같이 사이트( http://dl-ssl.google.com/android/eclipse )를 추가해야 한다.
해당 주소를 입력하고 OK를 누르면, 원래 떠 있던 창에 아래 그림과 같이 새로운 정보가 나타난다.
모두 설치한다. 라이선스 이슈같은 창에서 적당하 Next와 Finish를 클릭한다.(중간에 라이선스는 Yes(였나?)로 선택해야 함)
5. Preference에 안드로이드 SDK를 지정해준다.
메뉴에서 Window의 Preference를 선택하면 위 화면이 뜬다. 위 화면의 Android 탭을 선택하고 미리 구해놓은 (이미 압축은 해제된) 안드로이드 SDK 폴더를 지정한다. OK를 누른다.

설치하고 나면 화살표 아래 모양의 그림이 화면에 나오게 된다.(툴바 왼쪽에서 4번째)
이 아이콘을 클릭하면 위의 그림처럼 AVD Manager가 뜨게 된다.
지금 하나의 가상 디바이스가 이미 만들어져있다.
먼저 SDK 설치를 위해 Available Packages를 선택한다.
설치하고자 하는 SDK를 설치한다. 최근 SDK와 플랫폼은 2.2 API 8 버전이다.
API에 체크박스를 체크하고 설치한다.
설치가 완료되면 Virtual Devices를선택하고 New를 클릭하여 새로운 디바이스를 생성한다.
디바이스를 생성할 때 이름과 타겟을 지정하고 그냥 누르면 기본 형태의 디바이스가 생긴다. SDCARD를 주거나 해상도를 변경할 수도 있다.

생성한 Virtual Device를 선택하면 Start버튼이 활성화된다.
Start를 누러 안드로이드 에뮬레이터의 동작을 볼 수 있다.


허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
글에 질문 있으시면 답글 주시면 아는 노력해서 댓글 드립니다.
  1. barragan 2010.07.23 22:48 신고

    안녕하세요^^

    덕분에 설치를 마치고 Virtual Device를 실행시켰는데 옆에 버튼이랑 컨트롤이 안보이네요. 2.2 부터 없어진건지, 제가 해상도를 잘못줘서 그런지 모르겠습니다.

    좀 알려주실 수 있을까요?

    그럼 즐거운 주말되세요^^

    • 소혼 2010.07.25 17:06 신고

      virtual device를 실행후 나타나는 에뮬레이터는 오른쪽에 키보드와 컨트롤 버튼들이 있는데 이것들이 안보인다는 말씀이신지요?
      이것은 스킨과 관련이 있을 수 있습니다. 2.2의 기본 스킨들은 모두 키보드 레이아웃과 콘트롤이 보이는데 이상하군요. 만약 제가 질문을 잘못이해한거라면 자세히 설명해주시면 더 큰 도움을 드릴 수 있을것 같아요 :)

  2. barragan 2010.07.26 16:50 신고

    답변 감사합니다..^^

    질문이 그 부분이 맞습니다만..

    제 시스템이 워낙 후져서(팬티엄4 라서요..); Virtual Device 실행 자체가 어려워서 업그레이드 한 후에도 동일한 문제가 발생하면 다시 여쭤보겠습니다..^^

    감사합니다..^^

    • 소혼 2010.07.26 22:00 신고

      네, 혹시 스킨이 달라서 그런걸 수도 있으니 현재 안드로이드의 에뮬레이터 화면을 글에 추가했습니다.
      옜날 에뮬레이터는 휴대폰 모양이었습니다만, 최근에는 변경되었습니다.

      물론 휴대폰 모양으로 변경할수도 있습니다만, 스킨을 직접 추가해주어야 할 것입니다.

  3. barragan 2010.08.05 11:42 신고

    안녕하세요^^

    시스템 업그레이드 후 문제가 싹 사라지더군요..^^;;
    감사합니다..^^


    근데, 이 tistory 블로그는 네비게이션이 제겐 너무 어려워서..
    adroid 개발 관련 글들을 순서대로 볼 수 가 없네요.. ^^;;

    • 소혼 2010.08.05 23:00 신고

      예 개인적으로 다시 볼 것같은 글들을 정리하는 것이라 네비게이션을 생각 못했네요.
      사실 순서대로 볼만한 글들도 없습니다 ^^;

      글 적고 싶을 때 그 때 하고 있는 것들을 그냥 적어두는 편이라 다른 강좌 사이트만큼 체계가 있진 않거든요.

      사이트 리뉴얼을 고민해보도록 하겠습니다 ^^

안드로이드 에서 검색 버튼을 누르면 searchbox 가 뜬다.


이 searchbox가 뜨는 것을 막으려면

Activity에 아래와 같이 onKeyDown을 오버라이드 하면 된다.
모든 Activity에 넣어야 하는게 문제인데 혹시 다른 방법이 있다면 조언 부탁드립니다.

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.w("ENGLISH1", "KEYCODE : " + keyCode + " vs " + KeyEvent.KEYCODE_SEARCH);
        if (keyCode == KeyEvent.KEYCODE_SEARCH)
            return true;
        return super.onKeyDown(keyCode, event);
    }

허접한 글이지만, 도움이 되신다면 손가락 꾹 눌러주세요.

'<안드로이드>개발 > 안드로이드/App' 카테고리의 다른 글

[팁] SDCARD의 상태 확인  (0) 2010.06.26
[Widget][예제]ListView with CursorAdaptor  (3) 2010.06.24
[팁] Quick Search Box 막기(안뜨게 하기)  (0) 2010.06.19
MediaPlayer  (0) 2010.06.17
[공부] Thread  (2) 2010.06.17
[Widget 스터디] Seekbar  (4) 2010.06.16
<계속 업데이트 합니다 질문 환영>

자바를 해본지가 워낙 오래되어 놓으니 Thread도 제대로 못 만들어 헉헉된다.

안드로이드에서 Thread를 쓰려면 두개의 Runnable이 기본으로 생성되어야 하는 것 같다.

1. Thread 생성
    자바의 Thread를 만드는 것과 같다. 하지만 대부분 UI와 통신을 하기 위해서는 두개의 Runnable을 만드는게 일반적이다.
    private final Handler h = new Handler();
    private final Runnable uiProcess = new Runnable() {
        public void run() {
// UI와 통신을 담당, 버튼을 바꾸거나 seekbar를 수정하는 등
        }
    };
    private Runnable mythread = new Runnable() {// Child Thread
        public void run() {
            while (threadFlag) {
    h.post(uiProcess);
    try {
        Thread.sleep(300);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
        }
    };

쓰레드를 만들고 싶은 곳에서 mythread 를 만들어 start 시키면 된다.
Thread mMythread = new Thread(null, mythread, "mythread");
mMythread.start();
Child thread에서 threadFlag를 하나 넣은 이유는 자바가 stop 메소드가 deprecated 된 듯 하다.
thread를 종료시키는 제대로 된 루틴이 필요할 것 같다.
일단 심플하게 threadFlag를 넣는 걸로 처리했다.
  1. 음... 2013.08.26 17:26 신고

    항상 그렇지만...
    홈화면에 넣는 위젯 관련정보 검색하다 보면 Activity 내에서 동작하는 UI 관련 정보가 나오더군요...
    이런것은 Widget 이라는 제목 보다는 안드로이드 UI나 View 정도로 하시면 좋을듯 하지만 개인 블로그니...
    흠 죄송합니다

    • 소혼 2013.08.26 19:24 신고

      Widget 이란 용어가 워낙 다목적이다 보니, 그런 문제가 있네요. :)

      이런 오래된 글들까지 찾아보신 거라면 꽤 여기저기 뒤져보신것 같군요.

      좋은 정보 찾으셨길 빕니다.
      이름은 고쳐보겠습니다.(요샌 안드로이드 공부를 안하고 있지만요.)

< 계속 업데이트 합니다. 질문 환영 >
10-06-16 초기 문서, style 설정 등 작성
- Seekbar


Progress바와 유사하나, thumb를 옮겨 사용자가 원하는 위치로 이동하는 것이 가능하다.

1) 만드는 법
   -
2) Seekbar 변경에 반응하기

3) style 바꾸는 법
   - thumb 바꾸는 법
     thumb를 바꾸는 법은 쉽다. 함수를 사용할 경우,
     drawable.setBounds(new Rect(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()));
     mSeekbar.setThumb(drawable);
     layout을 사용할 경우 아래 속성을 Seekbar 태그에 포함시킨다.
     android:thumb="@drawable/pb_slider_thumb1"
   - thumb 없애기
     mSeekbar.setThumb(null);
     layout을 사용해서는 어떻게 해야 하는지 모르겠다.
     ( thumb을 통해서 없애는 방법을 쓰느니 progressbar를 쓰는게 낫다.
     아이스크림 샌드위치에서는 crash가 발생한다. 버그인듯; ) 

   - background, foregound 바꾸는 법
     xml로 이루어진 drawable을 추가한다.
     (이 때, 이미지들이 9patch가 안되어 있다면 동일한 이미지가 반복적으로 나타난다.)
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@android:id/background"
              android:drawable="@drawable/pb_slider_normal" />
        <item android:id="@android:id/secondaryProgress">
              <clip android:drawable="@drawable/pb_slider_normal"/>
        </item>
        <item android:id="@android:id/progress">
              <clip android:drawable="@drawable/pb_slider_highlight"/>
        </item>
</layer-list>
      seekbar 레이아웃에 이 xml 파일을 설정한다.
<SeekBar android:id="@+id/seek"
         android:layout_width="240dp"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="75" android:thumb="@drawable/pb_slider_thumb1"
        android:progressDrawable="@drawable/seekbar_drawable"/>


4) seekbar에 대한 이벤트 감지
        mSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                mplayer.seekTo(progress);
            }
       });

5) seekbar 위치 변경
       position / maxvalue 의 위치로 설정
       sk.setMax(maxvalue);
       sk.setProgress(position);

참고
source에서 id로 Drawable 만드는 법
Drawable d = getResources().getDrawable(drawable id)

참고 자료
http://blog.naver.com/ween8/50082179209
http://www.codeweblog.com/android-modify-seekbar-style/
http://www.helloandroid.com/tutorials/musicdroid-audio-player-part-i


  1. Mastre 2011.02.14 15:11 신고

    안녕하세요. 저도 Seek 을 가지고 개발 중인데 두개의 Thumb을 이용하는 방법이 있을까요?

    여러가지 해보는데 안되서요 ..

    • 소혼 2011.02.16 22:53 신고

      그냥은 안될것 같네요. AbsSeekBar 를 상속받거나 해야 할 것 같네요.

  2. Hyo 2011.05.27 10:02 신고

    안녕하세요.. 시크바에서 사용하는 progress 이미지 좀 주시면 안될까요??

  3. 자몽레드 2017.03.02 15:51 신고

    안드로이드 seekbar를 프로그래스바처럼 만들고 있었는데 progress의 코너도 둥글게 하면 막 밖으로 삐져나가고 난리도 아니더라구요.. 그래서 mask를 써야하나 tint를 퍼센티지로 줘야하나 되게 고민하고 있었는데 검색 마구 하다가 우연히 여기서 본 clip 속성 주니까 안삐져나가고 잘 되더라구요!!! 별 일 아닐수도 있는데 정말 감사드립니다 ㅠㅠㅠ


t = new TextView(context);
t
.setText(Html.fromHtml("<p>test</p>"));


이런 경우, 그냥 다시 켰다. 마땅한 방법이 없나? 쩝..
로그캣을 체크하라는 메시지가 나와있길래, 
Couldn't copy package file to temp file.
라는 에러가 로그에 적혀있는 걸 확인할 수 있었다.


이것을 바탕으로 검색한 결과.

즉, 내부 메모리가 부족하다는 뜻이다.
간단히 설치된 앱 몇개를 삭제해주니 에러가 사라졌다.(에뮬레이터의 내장 메모리가 너무 작았던 거구나 ;;)

또,
타겟에 올릴 때 연속해서 시도할 경우 이런 에러 메시지가 나는 경우가 있었다.


저작권 문제 있으면 삭제 하겠습니다.

android.os.Environment.getExternalStorageDirectory().getAbsolutePath();

/sdcard/ 가 기본 경로인듯 하다.

또 sdcard에 파일을 쓰려고 한다면,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
을 반드시 주어야 함.

+ Recent posts

티스토리 툴바