다음글 : 갤럭시 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 보호 필름 붙이고 인증샷

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
Posted by 소혼
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

Posted by 소혼
에뮬레이터를 만들 때, 혹은 추후에 가상의 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가 보여주는 위치를 사용하도록 한다.
허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
Posted by 소혼
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를 누러 안드로이드 에뮬레이터의 동작을 볼 수 있다.


허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
글에 질문 있으시면 답글 주시면 아는 노력해서 댓글 드립니다.
Posted by 소혼
안드로이드 에서 검색 버튼을 누르면 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
Posted by 소혼
<계속 업데이트 합니다 질문 환영>

자바를 해본지가 워낙 오래되어 놓으니 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를 넣는 걸로 처리했다.
Posted by 소혼
< 계속 업데이트 합니다. 질문 환영 >
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


Posted by 소혼

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


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


이것을 바탕으로 검색한 결과.
http://www.mail-archive.com/android-developers@googlegroups.com/msg75123.html

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

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

Posted by 소혼

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

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

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

또 sdcard에 파일을 쓰려고 한다면,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
을 반드시 주어야 함.
Posted by 소혼
이전버튼 1 2 3 4 5 6 이전버튼

티스토리 툴바