Lecture/Android/Samsung (2015.8)
Retired DISLab
목차 |
소스 코드 교안 다운로드
아래 코드를 다운로드 받아서 코드를 복사하여 실습합니다. 만약 파일이 zip 형태로 받아진다면, 다운로드 후 확장자를 pptx로 변환하면 됩니다.
한글 입력기 설치 방법
- HangulKeyboard.zip을 다운로드 받아 압축해제한다.
- 에뮬레이터에 설치한다.
C:> adb install HangulKeyboard.apk
개발 도구 다운로드
예제 프로그램 다운로드
Android 개념 및 개발 환경
II-2. 개발 환경 구축과 샘플 프로그램
II-4. Android 개발 도구
- Ex-Notepad) TraceView - 도구 사용법을 익히기 위하여 설치하는 프로그램. 실행하면 데이터베이스가 만들어진다.
II-5. Activity
II-6. User Interface - Layout & Menu
- Ex-Layout-1) Linear Layout
- Ex-Layout-2) Relative Layout
- Ex-Layout-3) Table Layout
- Ex-ToDoList-2) 리소스 사용하기
II-7. Activity
User Interface, Intent와 Broadcast Receiver
III-1. User Interface - Dialog
- Ex-Dialog-1) Dialog Test
- Ex-Dialog-2) Alert Dialog
- Ex-Dialog-3) AlertDialog List
- Ex-Dialog-4) AlertDialog RedioBox
- Ex-Dialog-5) Progress
- Ex-Dialog-6) ProgressBar
- Ex-Dialog-7) Thread Progress Dialog - User thread에서 UI를 변경하기 위하여
Message
를 사용한다. - Ex-Dialog-8) Custom Dialog
- Ex-Dialog-9) Custome Dialog 2
- Ex-Dialog-10) Activity Dialog
III-2. View
- Ex-Dialog-11) DatePicker
- Ex-View-1) 자동 완성 기능
- Ex-View-2) 입력 필터를 이용한 사용자 입력 제한
- Ex-View-3) Spinner 위젯을 이용한 제한적인 텍스트 입력
- Ex-View-4) GridView
- GridView Icon들 - 이 예제에서 필요한 그림을 나타내는 PNG 파일
- Ex-View-5) TabWidget
- Ex-View-6) Compound Control 만들기
- Ex-View-7) 나침반 뷰 만들기
III-3. User Interface - Resource
III-5. Intent & Adapter 연습
III-8. Service - IPC
데이터 저장, Telephony, Notification & Graphics
IV-1. Preference & File
- Ex-File-1) 지정된 경로에 파일 쓰기
- Ex-File-2) 지정된 경로에서 파일 읽기
- Ex-File-3) Raw 리소스 파일에서 읽기
- Ex-File-4) XML 파일 리소스에서 읽기
- Ex-File-5) SD 카드에 파일 생성 및 저장
- Ex-File-6) SD 카드에서 파일 읽기
- Ex-ToDoList-6) Preference 연습
IV-2. Database
IV-4. Network & Web
- Ex-Earthquake-1) 지진 뷰어 만들기 (XML 문서 Parsing)
- res/strings.xml에서 FEED 변경 : http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.atom
- 원래는 http://earthquake.usgs.gov/eqcenter/catalogs/1day-M2.5.xml였으나 위의 링크로 변경됨
- refreshEarthquakes() 메쏘드 수정
- res/strings.xml에서 FEED 변경 : http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.atom
Element entry = (Element) nl.item(i); Element title = (Element) entry.getElementsByTagName("title").item(0); Element g = (Element) entry.getElementsByTagName("georss:point").item(0); Element when = (Element) entry.getElementsByTagName("updated").item(0); Element link = (Element) entry.getElementsByTagName("link").item(0); // Ex-Earthquake-1 수정 // XML 데이터에 오류가 있어 위의 각 항목이 null일 경우 무시한다. if (entry == null || title == null || g == null || when == null || link == null) continue; // . . . // 원래 ss'Z' 였으나 ss.sss'Z'로 변경 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.sss'Z'"); // . . . // 진도가 소숫점 이하 짤리는 버그 수정 String magnitudeString = details.split(" ")[1]; double magnitude = Double.parseDouble(magnitudeString); // 원래 분리자가 , 였으나 - 로 변경 details = details.split("-")[1].trim();
IV-5. Telephony, Notification & Alarm
- Ex-Phone-1) 전화 통화 모니터링
- Ex-Phone-2) 셀 위치변화 추적하기
- Ex-Phone-3) SMS 메시지 보내기
- Ex-Toast-1) Customizing Toast - Toast를 화면 아래 정렬
- Ex-Toast-2) Customizing Toast - Toast 객체에 setView 사용
- Ex-Toast-3) Customizing Toast - 작업자 쓰레드에서 Toast 사용하기
- Ex-Notification-1) Notification 만들기
- Ex-Notification-1) 고급 Notification 기법
- Ex-Alarm-1) 알람 예제
IV-6. Graphics
- Ex-Graphic-1) 간단한 위젯
- Ex-Graphic-2) 페인트 위젯
- Ex-Graphic-3) 텍스트를 그리는 세 가지 방법 - Source Code
- Ex-Graphic-4) Canvas Transform
- Ex-Graphic-5) Canvas Transform - TextDrawable 사용하기
- Ex-Graphic-6) Canvas Transform - 비트맵 캐싱
IV-7. Media Framework
- Ex-Multimedia-1) MediaPlayer (Audio)
- Ex-Multimedia-3) 음성 재생
- Ex-Multimedia-2) VideoPlayer
- Ex-Multimedia-4) 음성 녹음
- Ex-Multimedia-5) 영상 녹화
IV-8. Sensors
위치기반 서비스 & Field Application
V-1. 위치기반서비스 - GPS
- 아래와 같이 AndroidManifest.xml을 수정해야 함.
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
- import 문을 아래와 같이 해야 함
import com.google.android.gms.commom.ConnectionResult; import com.google.android.gms.commom.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.commom.GooglePlayServicesClient.OnConnectionFailedListener;
V-2. Map
- 첨기연에서는 proxy 설정을 해야 API KEY를 구하는 사이트에 접근할 수 있다.
- 프록시 설정 파일 (인증서자동설치)를 다운로드 후 관리자 모드로 실행한다.
- https://code.google.com/apis/console
- APIs : activation
- Credentials - Create New Key - Android Key ; API Key 얻음
V-4. Preference
V-5. Content Provider를 통한 지진 데이터 공유
- Ex-Earthquake-4) Content Provider 만들기
- Ex-Earthquake-5) Content Provider 사용하기
- Ex-Earthquake-5a) Ex-Earthquake-5를 API Level 10 이상에서 동작할 수 있도록 network 코드를 user thread로 옮김 - 아래와 같이 수정함
private Handler handler = new Handler(); private void refreshEarthquakes() { Thread updateThread = new Thread(null, backgroundRefresh, "refresh_earthquake"); updateThread.start(); } private Runnable backgroundRefresh = new Runnable() { public void run() { doRefreshEarthquakes(); } }; private void doRefreshEarthquakes() { // 원래의 refreshEarthquakes 메소드 } Runnable notify = new Runnable() { public void run() { aa.notifyDataSetChanged(); } }; private void addQuakeToArray(Quake _quake) { if (_quake.getMagnitude() > minimumMagnitude) { // 새 지진을 우리의 지진 리스트에 추가한다. earthquakes.add(_quake); // 배열 어댑터에 변경을 통지한다. handler.post(notify); } }
V-6. Map & Service
- p.857 : AndroidManifest.xml에 gms.version, google_play_service_version 메타 태그를 반드시 넣어야 한다.
<source lang="xml"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <meta-data android:value="AIzaSyDy4abz4WUBVyOqKMpd-3CGymc0xZk5knM" android:name="com.google.android.maps.v2.API_KEY"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 아래 것은 제거해도 된다. <permission android:name ="com.example.locations.permission.MAPS_RECEIVE" android:protectionLevel="signature"></permission>
- p.859 : earthquakeCursor 값 설정이 누락되었으므로 추가할 것
@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.earthquake_map); earthquakeCursor = getContentResolver().query(EarthquakeProvider.CONTENT_URI, null, null, null, null); if (earthquakeMap == null) { earthquakeMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); } addEarthquakeMakerToMap(); }
- p.860 : LatLng에 인자가 잘못 들어감
double lat = (double) earthquakeCursor.getFloat(EarthquakeProvider.LATITUDE_COLUMN); double lng = (double) earthquakeCursor.getFloat(EarthquakeProvider.LONGITUDE_COLUMN); float magnitude = earthquakeCursor.getFloat(EarthquakeProvider.MAGNITUDE_COLUMN); long date = earthquakeCursor.getLong(EarthquakeProvider.DATE_COLUMN); LatLng geoPoint = new LatLng(lat, lng);