안드로이드/Android screenOrientation (가로/세로 모드설정) 하기


안드로이드 프로젝트를 진행하다 보면, 가로 혹은 세로 모드로 진행해야 할 경우가 있습니다. 보통 폰단말에서는 가로모드를 많이 지원하고, 태블릿PC 에서는 세로 모드로 진행을 하는데요. 그렇다면 한가지 모드로 개발을 진행해야 할 경우 어떻게 설정을 해주어야 할까요?


속성은 바로 AndroidManifest.xml 에 추가해 주시면 됩니다.

<activity android:name="arabiannight.tistroy.com.ScreenOrientaion"
             android:screenOrientation="landscape"
             >


위에 보시는 바와 같이 모드를 설정하고자 하는 Activity 에 "android:screenOrientation" 속성을 지정하는 것인데요.! 

landscape : 가로

portrait : 세로



출저 : 아라비안나이트

http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-screenOrientation-%EA%B0%80%EB%A1%9C%EC%84%B8%EB%A1%9C-%EB%AA%A8%EB%93%9C%EC%84%A4%EC%A0%95-%ED%95%98%EA%B8%B0

서비스 생명주기

서비스의 생명주기는 두 가지로 분류할 수 있다. 먼저 타입 A는 로컬 서비스를 구현하는 것이고, 타입 B는 원격 서비스를 구현하는 것이다. 그래서 타입 B로 서비스를 구현할 경우, 같은 기기에서 실행되고 있는 다른 애플리케이션에서 원격 서비스로 구현된 서비스를 실행할 수 있게 된다.

정리 Service 타입 A
▶ onCreate(): 서비스가 생성될 때 호출
▶ onStart(): startService() 메소드에 의해 서비스가 시작될 때마다 호출
▶ onDestory(): 서비스가 종료될 때 호출

정리 Service 타입 B
▶ onCreate(): 서비스가 생성될 때 호출
▶ onBind(): bindService() 메소드에 의해 서비스가 시작될 때 호출
▶ onUnbind(): 서비스와 연결이 끊겼을 때 호출
▶ onDestory(): 서비스가 종료될 때 호출

다음은 서비스 생명주기의 두 가지 타입을 보여준다.


출저 : https://kairo96.gitbooks.io/android/content/ch2.5.1.html 안드로이드 사이드

인텐트

인텐트(Intent)는 컴포넌트에 액션, 데이터 등을 전달하는 메시지 객체이다. 인텐트 객체의 구성 요소는 다음과 같다.

정리 Intent 객체의 구성 요소

▶ Action(액션): 수행할 액션 이름(ACTION_DIAL)
▶ Data(데이터): 수행할 데이터의 URI(tel:)
▶ Category(카테고리): 수행할 액션에 대한 추가적인 정보
▶ Type(타입): 수행할 인텐트 데이터의 명시적인 타입(MIME 타입)(video/mpeg)
▶ Component name(컴포넌트 이름): 대상 컴포넌트의 완전한 클래스 이름
▶ Extras(추가 정보): 인텐트를 다루는 컴포넌트에 추가적으로 전달할 한 쌍의 키/값

이 구성 요소를 활용하면 다른 애플리케이션의 액티비티를 실행하거나 데이터를 전달해줄 수 있다. 이 중에서 가장 중요한 요소는 Action이다. 액션은 액티비티와 브로드캐스트 액션으로 구분할 수 있으며 다음은 액티비티 액션 중에서 가장 자주 사용하는 것을 정리한 것이다.

API Intent의 주요 액티비티 액션

Action설명
ACTION_MAIN시작 액티비티를 지정하기 위한 액션
ACTION_VIEW데이터의 URL로 가장 적절한 액티비티를 호출하는 액션
content://contacts/people/1
ACTION_DEFAULTACTION_VIEW와 동일
ACTION_EDIT수정하기 위해 호출하는 액션
ACTION_DELETE삭제하기 위해 호출하는 액션
ACTION_DIAL전화 다이얼 액티비티를 호출하는 액션
content://contacts/people/1
tel:0101235678
ACTION_CALL전화 액티비티를 호출하는 액션
tel:0101235678
ACTION_WEB_SEARCH웹 검색 액티비티를 호출하는 액션
ACTION_SEARCH검색 액티비티를 호출하는 액션
ACTION_SENDTO이메일 등의 메시지 전송을 지정하는 액션
ACTION_ANSWER전화 착신을 위한 액션

※ 참고로, content://contacts/people/1는 주소록에서 식별자가 1인 사람에 대한 정보를 가리키며, tel:0101235678는 전화번호 0101235678을 가리킨다.


코드 인텐트 전달

Intent intent = new Intent(this, IntentCallee.class);  
intent.putExtra("name", "gildong");  
intent.putExtra("age", 30);  
startActivity(intent);

코드 인텐트 수신

Intent intent = getIntent();  
String name = intent.getStringExtra("name");  
int age = intent.getIntExtra("age", 20);


인텐트 필터

인텐트 필터(IntentFilter)는 특정 인텐트를 받을지 말지를 정의하는 역할을 수행하며, 이를 통해 컴포넌트의 특징이 정해진다. 예를 들어, 인텐트 필터의 에 android.intent.action.MAIN을 선언하고 에 android.intent.category.HOME을 선언하면, 해당 컴포넌트는 홈 애플리케이션이 되어 디바이스가 시작될 때 자동으로 시작될 수 있는 애플리케이션이 된다. 인텐트 필터는 AndroidManifest.xml에 다음처럼 다양하게 정의할 수 있다(다음의 예제는 안드로이드 예제로 제공되는 노트패드 애플리케이션에 포함된 것이다). 인텐트 필터를 구성하는 요소는 인텐트에 작성할 수 있는 요소들과 동일하다.

 AndroidManifest.xml


표준 액티비티 액션

액티비티 액션은 액티비티를 어떻게 실행할 지를 지정하는 속성이다. 이 액션들은 액티비티를 실행할 때 사용하는 startActivity(Intent) 메소드에 지정하는 인텐트 객체에 설정할 수 있다.

  • ACTION_MAIN 시작 액티비티를 지정하는 액션
  • ACTION_VIEW 데이터를 사용자에게 보여주는 액션
  • ACTION_ATTACH_DATA 데이터가 첨부되었다는 것을 알려주는 액션
  • ACTION_EDIT 데이터 수정을 요청하는 액션
  • ACTION_PICK 데이터에서 원하는 것을 선택하는 액션
  • ACTION_CHOOSER 액티비티 선택 화면을 보여주는 액션
  • ACTION_GET_CONTENT 사용자가 선택한 데이터를 반환하는 액션
  • ACTION_DIAL 전화 다이얼 액티비티를 호출하는 액션
  • ACTION_CALL 전화를 거는 액션
  • ACTION_SEND 데이터를 전송하는 액션
  • ACTION_SENDTO 데이터를 지정된 곳에 전송하는 액션
  • ACTION_ANSWER 수신중인 전화를 다루는 액션
  • ACTION_INSERT 주어진 컨테이너로 아이템을 삽입하는 액션
  • ACTION_DELETE 주어진 컨테이너의 데이터를 삭제하는 액션
  • ACTION_RUN 데이터를 실행하는 액션
  • ACTION_SYNC 데이터 동기화를 수행하는 액션
  • ACTION_PICK_ACTIVITY 액티비티를 골라주는 액션
  • ACTION_SEARCH 검색을 수행하는 액션
  • ACTION_WEB_SEARCH 웹 검색을 수행하는 액션
  • ACTION_FACTORY_TEST 공장 테스트를 나타내는 액션

표준 브로드캐스트 액션

다음은 브로드캐스트 리시버가 받을 수 있는 액션들이다. 이 액션들은 registerReceiver(BroadcastReceiver, IntentFilter) 메소드의 IntentFilter에 정의하거나 AndroidManifest.xml의 태그 안에 정의할 수 있다.

  • ACTION_TIME_TICK 현재 시간이 변경되었음을 알려주는 액션
  • ACTION_TIME_CHANGED 시간이 설정되었음을 알려주는 액션
  • ACTION_TIMEZONE_CHANGED 시간대가 변경되었음을 알려주는 액션
  • ACTION_BOOT_COMPLETED 기기 부팅이 완료되었음을 알려주는 액션
  • ACTION_PACKAGE_ADDED 패키지가 추가되었음을 알려주는 액션
  • ACTION_PACKAGE_CHANGED 패키지가 변경되었음을 알려주는 액션
  • ACTION_PACKAGE_REMOVED 패키지가 제거되었음을 알려주는 액션
  • ACTION_PACKAGE_RESTARTED 패키지가 다시 시작되었음을 알려주는 액션
  • ACTION_PACKAGE_DATA_CLEARED 사용자가 패키지 데이터를 정리했음을 알려주는 액션
  • ACTION_UID_REMOVED 시스템에서 사용자 아이디가 제거되었음을 알려주는 액션
  • ACTION_BATTERY_CHANGED 배터리 정보가 변경되었음을 알려주는 액션
  • ACTION_POWER_CONNECTED 외부 전원이 연결되었음을 알려주는 액션
  • ACTION_POWER_DISCONNECTED 외부 전원 연결이 해지되었음을 알려주는 액션
  • ACTION_SHUTDOWN 기기가 종료될 것이라는 것을 알려주는 액션

표준 카테고리

카테고리는 인텐트 대상에 대한 분류 정보를 지정하는 속성이다. addCategory(String) 메소드로 추가할 수 있으며 카테고리를 지정하여 원하는 대상을 명확히 지정할 수 있다.

  • CATEGORY_DEFAULT 가장 기본이 되는 액티비티
  • CATEGORY_BROWSABLE 웹 브라우징을 할 수 있는 액티비티
  • CATEGORY_TAB TabActivity 내에서 사용되는 탭을 지정
  • CATEGORY_ALTERNATIVE 사용자가 현재 보고 있는 데이터의 대체 액션
  • CATEGORY_SELECTED_ALTERNATIVE 사용자가 현재 선택한 데이터의 대체 액션
  • CATEGORY_LAUNCHER 애플리케이션에서 가장 먼저 실행되는 액티비티
  • CATEGORY_INFO 패키지에 대한 정보를 제공하는 액티비티를 지정
  • CATEGORY_HOME 가장 처음 실행되는 액티비티를 지정
  • CATEGORY_PREFERENCE 프리퍼런스 액티비티
  • CATEGORY_TEST 테스트로 사용할 경우 지정
  • CATEGORY_CAR_DOCK 기기가 차량용 거치대에 장착되었을 때 호출되는 액티비티를 지정
  • CATEGORY_DESK_DOCK 기기가 책상용 거치대에 장착되었을 때 호출되는 액티비티를 지정
  • CATEGORY_CAR_MODE 차량에서 사용할 수 있는 액티비티를 지정

표준 추가 데이터

다음은 추가 데이터로 사용할 수 있는 필드이다. putExtra(String, Bundle) 메소드와 함께 사용된다.

  • EXTRA_ALARM_COUNT AlarmManager가 사용하는 알람 개수
  • EXTRA_BCC 이메일의 숨은 참조 리스트
  • EXTRA_CC 이메일의 참조 리스트
  • EXTRA_DATA_REMOVED 데이터 전부 제거인지 아닌지를 알려주는 불린 값(ACTION_PACKAGE_REMOVED에서 사용)
  • EXTRA_DOCK_STATE 거치대 상태를 요청할 때 사용하는 데이터(ACTION_DOCK_EVENT에서 사용)
  • EXTRA_DOCK_STATE_HE_DESK 거치대가 디지털인지를 알려주는 숫자 값
  • EXTRA_DOCK_STATE_LE_DESK 거치대가 아날로그인지를 알려주는 숫자 값
  • EXTRA_DOCK_STATE_CAR 거치대가 차량용인지를 알려주는 숫자 값
  • EXTRA_DOCK_STATE_DESK 거치대가 책상용인지를 알려주는 숫자 값
  • EXTRA_DOCK_STATE_UNDOCKED 기기가 거치대에 없다는 것을 알려주는 숫자 값
  • EXTRA_DONT_KILL_APP 애플리케이션을 재시작하는 기본 액션을 재정의하기 위해 ACTION_PACKAGE_REMOVED나 ACTION_PACKAGE_CHANGED에서 사용하는 여분의 불린 값
  • EXTRA_EMAIL 전송할 이메일 주소
  • EXTRA_INITIAL_INTENTS ACTION_CHOOSER에 의해 보여질 인텐트들
  • EXTRA_INTENT ACTION_PICK_ACTIVITY에 사용할 인텐트 정보
  • EXTRA_KEY_EVENT 인텐트에 의해 호출될 이벤트 정보를 나타내는 KeyEvent 객체
  • EXTRA_PHONE_NUMBER 전화 액션 관련해 저장할 전화번호
  • EXTRA_REMOTE_INTENT_TOKEN 원격 인텐트에 사용할 추가 정보
  • EXTRA_REPLACING 패키지가 교체를 알리기 위해 ACTION_PACKAGE_REMOVED에 사용하는 불린 값
  • EXTRA_SHORTCUT_ICON 단축 아이콘에 사용할 Bitmap 이름
  • EXTRA_SHORTCUT_ICON_RESOURCE 단축 아이콘에 사용할 리소스 이름
  • EXTRA_SHORTCUT_INTENT 단축 아이콘을 나타내는 이름
  • EXTRA_STREAM ACTION_SEND와 함께 사용될 수 있는 스트림
  • EXTRA_SHORTCUT_NAME 단축 아이콘 이름을 정의하는 이름
  • EXTRA_SUBJECT 메시지 제목
  • EXTRA_TEMPLATE ACTION_INSERT와 함께 사용되는 초기 데이터
  • EXTRA_TEXT ACTION_SEND와 함께 사용되는 문자열
  • EXTRA_TITLE ACTION_CHOOSER에 의해 사용되는 다이얼로그 제목
  • EXTRA_UID ACTION_UID_REMOVED와 함께 사용되는 패키지의 아이디

플래그

인텐트에 사용할 수 있는 플래그(Flags)이다. 인텐트에 플래그를 설정해서 특정 정보를 전달할 수 있으며 대부분의 플래그는 액티비티의 동작 방식을 변경하는 용도로 쓰인다. setFlags(int)와 addFlags(int) 메소드가 함께 사용된다.

  • FLAG_GRANT_READ_URI_PERMISSION URI 읽기 권한 플래그
  • FLAG_GRANT_WRITE_URI_PERMISSION URI 쓰기 권한 플래그
  • FLAG_DEBUG_LOG_RESOLUTION 디버깅 정보를 로그로 출력해주는 플래그
  • FLAG_FROM_BACKGROUND 백그라운드 동작임을 알려주는 플래그
  • FLAG_ACTIVITY_BROUGHT_TO_FRONT 태스크에 있는 액티비티가 다시 실행되었을 때 시스템이 설정하는 플래그
  • FLAG_ACTIVITY_CLEAR_TASK 태스크를 초기화하는 플래그
  • FLAG_ACTIVITY_CLEAR_TOP 실행할 액티비티가 태스크에 이미 있다면 태스크에 있는 동일한 액티비티부터 최상단의 액티비티까지 모두 제거하고 새로운 액티비티를 실행하는 플래그
  • FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 태스크가 재시작할 때, 액티비티를 종료할 수 있도록 액티비티에 표시를 하는 플래그
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS "최근 실행 액티비티 목록"에 보이지 않도록 하는 플래그
  • FLAG_ACTIVITY_FORWARD_RESULT 액티비티 처리 결과를 전달할 수 있는 플래그
  • FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY "최근 실행 액티비티 목록"에서 실행될 경우 시스템에 의해 설정되는 플래그
  • FLAG_ACTIVITY_MULTIPLE_TASK 액티비티를 항상 새로운 태스크에서 실행하는 플래그
  • FLAG_ACTIVITY_NEW_TASK 실행한 액티비티와 관련된 태스크가 존재하면 동일한 태스크 내에서 실행하고 그렇지 않으면 새로운 태스크에서 액티비티를 실행하는 플래그
  • FLAG_ACTIVITY_NO_ANIMATION 액티비티 전환시 애니메이션을 사용하지 않게 하는 플래그
  • FLAG_ACTIVITY_NO_HISTORY 실행된 액티비티를 태스크 스택에서 관리하지 않도록 해주는 플래그
  • FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 사용자가 홈 스크린이나 "최근 실행 액티비티 목록"에서 태스크를 시작할 경우 시스템에 의해 설정되는 플래그
  • FLAG_ACTIVITY_REORDER_TO_FRONT 실행된 액티비티가 태스크에 이미 존재하는 액티비티라면 새로 실행하지 않고 태스크에 있는 액티비티를 스택 최상단으로 옮기는 플래그
  • FLAG_ACTIVITY_SINGLE_TOP 실행할 액티비티가 태스크 스택 최상단에 이미 있다면 액티비티를 다시 실행하지 않는 플래그
  • FLAG_ACTIVITY_CLEAR_TASK 태스크를 초기화하는 플래그
  • FLAG_RECEIVER_REGISTERED_ONLY 등록된 리시버만 브로드캐스트를 받을 수 있게 해주는 플래그



출저 : 안드로이드 사이드 https://kairo96.gitbooks.io/android/content/ch2.8.html

+ Recent posts