[07-D2][UI 설계] Activity, LogCat Debug

[01] Activity의 이해
     - 하나의 윈도우 화면에 해당, 클래스로 대응됨.
     - Activity Class 및 ListActivity같은 확장 기능을 제공하는 클래스를 상속받아 구현.
     - onCreate() 메소드에서 setContentView()메소드를 이용해 사용자 인터페이스 출력.
     - intent filter등을 통해 Activity의 추가 기능을 지정 가능.


1. Activity Lifecycle
   - Reference에서 API 참조.

 


2. Activity Stack
   - 액티비티가 실행되면 스택의 자료구조와 같은 형태로 액티비티를 관리함.

     새로운 액티비티 -----> 활성 액티비티
                             :
                             :
                            뒤로가기 버튼 클릭 및 종료 기능작동
                             :
                             :
                             :
                            바로전 활성 액티비티
                            기타 액티비티 3
                            기타 액티비티 2
                            기타 액티비티 1 <--- 메모리 부족시 자동 종료.

 


3. Activit State
   1) 활성 Activity: Stack의 맨위에 있으며 사용자의 포커스를 받고 있음.
   2) 일지 중지 Pause: 사용자에게 보이나 포커스를 받고 있지 않은 상태, 투명 액티비티등의 실행의 경우.
   3) 중지 Stopped: 액티비티가 화면에서 보이지 않을 경우.
   4) 비활성 Inactive: 액티비티 스택에서 제거됨.

 

 


[02] LogCat Debug
     - 로깅 기능을 통하여 개발시에 진행 상황을 체크할 수 있다.
1. 로깅 메서드
   - Log.e(): 에러를 기록.
   - Log.w(): 경고를 기록.
   - Log.i(): 처리상황등 정보성 메시지를 기록.
   - Log.d(): 개발시 에러 처리를 위해 에러 수정 목적으로 기록.
   - Log.v(): 상세 정보를 기록.

 


2. 사용 방법
   import android.util.Log;
   .....
   .....
   private static final String Log_TAG = "TableLayoutTest";
   .....
   .....
   // LogCat View에 출력
   System.out.println("str의 값: " + str);
   Log.d(Log_TAG, str);

 


3. AndroidManifest.xml 파일 설정
   아래처럼'android:debuggable="true"'추가 할 것.

   <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

 


4. 실행시 Debug As...로 실행해야 로그를 볼 수 있다.

 

 

5. 프로젝트 생성
   - Project Type: Android Project
     Project name: Debugging_4
     Application name: Debugging_4
     Package name: android.debugging
     Create Activity(Activity name): Debugging
     Min SDK Version: 4


1) styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="main">
        <item name="android:textSize">16sp</item>
    </style>
    <style name="standard" parent="main">
        <item name="android:textColor">#FFFFFF</item>
    </style>
    <style name="title" parent="main">
        <item name="android:textColor">#00FF00</item>
    </style>
    <style name="btn_1" parent="@android:style/Widget.Button">
        <item name="android:textColor">#000000</item>
        <item name="android:textSize">16sp</item>
        <item name="android:gravity">center_vertical|center_horizontal</item>
    </style>
</resources>

 


2) strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, Debugging!</string>
    <string name="app_name">Debugging_4</string>
</resources>

 


3) main.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"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=" 숫자를 입력하세요...."
    style="@style/main"
    />
<LinearLayout android:id="@+id/LinearLayout01"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content">
    <EditText android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="7"
            android:id="@+id/edtN"
            android:text="@+id/edtN"
            style="@style/main" />
    <Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="3"
    android:id="@+id/btnExecute"
    android:text="@+id/btnExecute"
    style="@style/main"  />
</LinearLayout>

<TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/txvResult"
    android:text="@+id/txvResult"
    android:layout_marginTop="10dp"
    style="@style/main"
    />

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btnFinish"
    android:text="@+id/btnFinsih"></Button>
</LinearLayout>

 


4) debugging.java
package android.debugging;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Debugging extends Activity implements OnClickListener{
   
    EditText edtN;
    Button btnExecute;
    TextView txvResult;
    Button btnFinish;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Log.d("D", "onCreate() execute...");
       
        edtN = (EditText)findViewById(R.id.edtN);
        edtN.setText("");
       
        btnExecute = (Button)findViewById(R.id.btnExecute);
        btnExecute.setOnClickListener(this);
        btnExecute.setText("소인수 분해 실행");
       
        txvResult = (TextView)findViewById(R.id.txvResult);
        txvResult.setText("");
       
        btnFinish = (Button)findViewById(R.id.btnFinish);
        btnFinish.setOnClickListener(this);
        btnFinish.setText("종료");
    }

    public void calculate(){
        int[] s = new int[20];     // 소인수 분해한 수 저장
        String str="";                // 소인수 분해한 결과

        int n = Integer.parseInt(edtN.getText().toString());  // 입력받는 수, 나누어 지는 수
        out_label:
        if (n >= 2){
            int c = 0;   // 소인수 계산처리, 배열 index
            int k = 2;   // 젯수, 나누는수             
            while(true){
                if (n % k != 0){
                    k = k + 1;
                    Log.d("D", "k: "+k);
                }else{
                    c = c + 1;     // 배열 인덱스 증가
                    Log.d("D", "c: "+c);
                    s[c] = k;      // 배열에 값 저장
                    // 새로운 n  
                    // 20 / 2 = 10
                    // 10 / 2 = 5
                    //  5 / 5 = 1
                    n = n / k;   // 나누어 떨어진 경우 1
                    Log.d("D", "n: "+n);
                    if (n != 1){
                        k = 2;
                        continue;
                    }else{
                        if(c == 1){ // 약수가 하나라면
                            str = "1과 자기자신으로만 나누어 떨어지는 소수";
                            break out_label;
                        }else{
                            for(int y=1; y<=c-1; y++){
                                str = str + (s[y] + "X");
                            }
                            str = str  + (s[c]) + " 입니다.";
                            break out_label;
                        }
                    }
                }
            }
        }else{
            str = "소수가 아님";
        }
        Log.d("D", "str: "+str);
        txvResult.setText(str);      
    }
   
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btnExecute){
            calculate();   
        }else  if (v.getId() == R.id.btnFinish){
            finish();
        }
       
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("D", "onDestroy() execute...");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("D", "onPause() execute...");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("D", "onRestart() execute...");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("D", "onResume() execute...");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("D", "onStart() execute...");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("D", "onStop() execute...");
    }
   
     
   
}

 

 

Posted by ▶파이팅◀


[06-D2] Emulator, 한글 키패드 설정 & Android App의 수동 설치

[과제] 2개의 수를 입력받아 사칙연산을하는  Application의 작성.

1. 프로젝트 생성
   - Project Type: Android Project
     Project name: Test_Activity_4
     Application name: Activity Test
     Package name: android.test.activity   <-- 2단이상의 패키지 사용
     Create Activity(Activity name): TestActivity
     Min SDK Version: 4


1. 문자열 리소스 편집
    res/values/strings.xml

    - 화면 레이아웃
    수 1: [        ]  --> txtSu1, edtSu1
    수 2: [        ]  --> txtSu2, edtSu2
    [더하기] [        ]   --> btnAdd, txtAdd
    [빼기]    [        ]   --> btnSub, txtSub
    [종료]                 --> btnFinish

    Button, TextView, EditText
    Text @string/txtSu1
    Text @string/txtSu1
   


2. 디자인 layout
    /res/layout/main.xml
   
    Button, TextView, EditText


       
3. 입출력 상자 reset

 

4. 이벤트 등록
import android.view.View.OnClickListener;

public class TestActivity extends Activity implements OnClickListener{

    // public abstract void  onClick  (View  v)
 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  
 }

 

 

[01] Emulator

1. 브러우저의 사용

 

2. Home button
    - 홈(바탕) 화면 출력

 

3. Back button
    - 실행되는 어플리케이션의 종료 예약, 바로 종료 되지 않을 수도 있다.
    - Application이 여러개가 실행되는 경우 종료 대기로 빠지며 Stack에 쌓여있는 프로그램중에 가장 최근의
      프로그램이 활성 상태가 됨.


 

4. Locale(지역) 설정
   [Emulator --> Menu --> Settings --> Locale & Text(Language & Keyboard) --> Korean]선택시 아이콘이
   한글로 출력됨.

 


5. 표준 시간대 설정
 [Emulator --> Menu --> Settings --> 날짜 및 시간 --> 자동 체크 해제 --> 표준 시간대 선택]
 한국 표준시 (서울) 선택.

 

6. 화면 방향 설정
    - Ctrl + F11

 

 


[02] 한글 키패드 설정 & Android App의 수동 설치

1. 한글 키패드 설정
   1) http://www.androidpub.com/198992 에 접속하여 'HangulKeyboard.apk'파일을 다운받습니다.

   2) 핸드폰이 연결되어 있다면 연결을 해제하고 에뮬레이터를 실행합니다.

   3) 설치
       dev@ubuntu:~$ adb devices
       List of devices attached
       emulator-5554 device

       ls -l
       adb install HangulKeyboard.apk

   4) Emulator: 설정 --> 로케일 및 텍스트 --> 한글 접촉식 키보드 선택

   5) 에뮬레이터에서 [?123]버튼을 길게 눌러 입력방식을 변경합니다.


※ apk 삭제
   adb uninstall HangulKeyboard.apk


※ apk 재설치
   adb install -r HangulKeyboard.apk

 


[안드로이드 2.2 참고] http://snoopybox.co.kr/1342 
 
 


 
 

Posted by ▶파이팅◀


[05-D1] 폰 환경 설정 및 테스트(Window XP, Ubuntu Linux 10.04)

[01] Window XP환경에서의 폰 테스트 환경 설정(LG-KH5200 기준)

1. 각 이동 통신사의 USB 드라이버 설치
   - LG-KH5200: LGUSBModemDriver_WHQL_Kor_Ver_4.9.7_All_Win7.exe
  


2. 폰 연결

 

3. 폰 설정
   KH5200 --> 키보드 --> Menu --> 설정 --> 응용프로그램 - 알 수 없는 소스] 체크
   KH5200 --> 키보드 --> Menu --> 설정 --> 응용프로그램 - 개발 - USB 디버깅 ] 체크

 


4. Android USB Driver 설정 파일을 수정하여 LG-KH5200 등록
   H:/201003_android/android-sdk-windows/usb_driver/android_winusb.inf 편집
   43번 라인에 아래의 내용 추가

;Google NexusOne
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E12&MI_01

;
;LG KH5200 
%CompositeAdbInterface%     = USB_Install, USB\VID_1004&PID_6171&MI_01

[Google.NTamd64]

 


5. 안드로이드 폰을 연결합니다.
   폰을 인식은 하지만 드라이버를 찾지 못함으로 종료되도록 한다.

 


6. 윈도우 USB Driver 환경 설정
   [내 컴퓨터 --> 하드웨어 --> 장치 관리자] 에서
   두번째 'LG Mobile USB Modem'을 선택하고 '드라이버 업그레이드'를 할 것.
   드라이버의 경로로 'H:/201003_android/android-sdk-windows/usb_driver'로 지정.

  


7. 설치된 장치의 확인
   Emulator를 끝내고 아래의 명령어를 도스상에서 입력합니다.

C:\Documents and Settings\STU>adb devices
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached
80A351752040019300      device

 


8. eclipse에서 프로젝트 실행시 스마트폰이 연결되어 있으면 자동으로 스마트폰으로
   실행됨으로 [생성된 프로젝트 선택 --> Run As --> Run Configurations -->
   Deployment Target Selection mode] Manual로 지정.

   이후 프로젝트 실행시 실행 환경을 선택하는 창이 열림.

 

 

[문제 해결 참고]

1. 목록에 나타나지 않으면 [내 컴퓨터 --> 하드웨어 --> 장치 관리자] 에서
   'USB Composit 장치'를 제거합니다.
   [하드웨어 변경 사항 검색]을 클릭.
   다시 드라이버를 요구하면 드라이버의 경로로 'H:/201003_android/android-sdk-windows/usb_driver'로 지정.

 


2. 그래도 인식이 안되면 재부팅 할 것.

 

 

[02] 기타 폰의 테스트

1.폰에 해당하는 USB 드라이버 설치 후 테스트

 


 
[03] Ubuntu Linux 폰 테스트 환경 설정.
      - 폰 설정
        Menu --> 설정 --> 응용프로그램 - 알 수 없는 소스] 체크
        Menu --> 설정 --> 응용프로그램 - 개발 - USB 디버깅 ] 체크

        LG Android 1은 SD 카드에서 대용량 스토리지 선택 체크


1. lsusb 명령으로 USB를 인식하는지 테스트.
dev@ubuntu:~$ lsusb
Bus 001 Device 002: ID 1004:6171 LG Electronics, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0e0f:0002 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

 


2. root권한으로 gedit 실행
    dev@ubuntu:~$ pwd
    /home/dev
    sudo gedit /etc/udev/rules.d/99-android.rules

 


3. 아래의 내용을 입력하고 저장
   - Bus 001 Device 002: ID 1004:6171 LG Electronics, Inc. 부분에 나타난 주소중에 1004를 입력
     통신사별로 다른 값임으로 주의해서 입력할 것.
   - HTC: 0bb4

   >>>>> /etc/udev/rules.d/99-android.rules 저장

   >>>>> Google 넥서스 1 폰의 경우
   SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", SYMLINK+="android_adb", MODE="0666"

   >>>>>  Samsung 폰의 경우
   SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", SYMLINK+="android_adb", MODE="0666"

   >>>>> HTC 폰의 경우
   SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", SYMLINK+="android_adb", MODE="0666"

   >>>>> LG 폰의 경우
   SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", SYMLINK+="android_adb", MODE="0666"

 

 

4. udev 재시작
   dev@ubuntu:~$ sudo /etc/init.d/udev restart
   [sudo] password for dev:
   * Stopping kernel event manager...                                      [ OK ]
   * Starting kernel event manager...                                      [ OK ]

 


5. 안드로이드폰을 연결 해제 후 다시 연결하면 인식이 됨.

  


6. eclipse에서 프로젝트 실행시 스마트폰이 연결되어 있으면 자동으로 스마트폰으로
   실행됨으로 [생성된 프로젝트 선택 --> Run As --> Run Configurations -->
   Deployment Target Selection mode] Manual로 지정.

   이후 프로젝트 실행시 실행 환경을 선택하는 창이 열림.

 

7. 소스  수정후 실행시 Reinstall 에러 메시지가 뜨면 폰에서 프로그램을 삭제 후
    다시 실행 할 것.

 
 
 
 
 
 

Posted by ▶파이팅◀
이전버튼 1 2 3 4 5 6 7 ··· 36 이전버튼

블로그 이미지
Let's start carefully from the beginning
▶파이팅◀

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
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

최근에 올라온 글

최근에 달린 댓글

글 보관함