Chapter 03. Mobile APIs
Android Java 언어, Windows & Mac 에서개발 Eclipse, JDK, Android SDK Android Studio 2 - jdk-8u101-windows-x64.exe - android-studio-bundle-145.3276617-windows.exe ios Objective C & Swift 언어, Mac 에서개발 Xcode
API (Application Program Interface) 프로그래머를위한운영체제나프로그램의인터페이스 API 의구현 프로그램내에서실행을위해서브루틴에연결을제공하는함수를호출 좋은 API Build block 을제공함으로써프로그램개발을쉽게해주는것 Mobile API Mobile 운영체제에서프로그래머를위한프로그램인터페이스 화면구성, 다양한센서, 모듈등을제어및사용하기위한 APIs
Android Basic Activity Empty Activity Fullscreen Activity Google AdMob ads Activity Google Maps Activity Login Activity
ios Single View Game Master-Detail Application Page-Based Application Tabbed Application Sticker Pack Application
Android Java Main code : 각종함수및구현담당 레이아웃 xml : 액티비티의메인레이아웃담당 String.xml : 각컴포넌트및 string 값을담당 안드로이드매니페스트 : 앱을구성하는다양한요소 ( 액티비티, 서비스, 브로드캐스트수신자, 데이터제공자, 퍼미션등을정의 ) 를합치는역할
ios main.m : 첫실행만담당 Storyboard : Launchscreen ( 첫실행시화면 ), Main ( 실제레이아웃담당 ) AppDelegate : 화면의상태및임시저장을담당하며가장기본코드 ViewController : 실행이후첫화면구성, 각종함수, 컴포넌트를구현실행
Android (Statechange) 영속적상태 : 화면상태, 콘텐츠제공자, 파일등저장이필요한데이터 동적상태 : 사용자입력중화면회전, 타액티비티실행등으로인한저장이필요한데이터
ios application:willfinishlaunchingwithoptions App 실행을완료할준비 application:didfinishlaunchingwithoptions App 실행완료후동작 applicationdidbecomeactive Active 상태로된경우 applicationwillresignactive Resign 즉 Background 로갈예정일때 applicationdidenterbackground Background 로간후 applicationwillenterforeground 다시 Foreground 로갈경우 applicationwillterminate App 을완전히종료하는경우
Android 버튼이있는경우 (EventExample) Button android:onclick= startbutton 설정한후, startbutton() 함수를실행함 그렇지않은경우이벤트리스너와콜백메서드를이용해설정가능 OnClickListener, OnLongClickListener 등 버튼이없이사용자의터치위치, 다중터치에관한이벤트처리 (MotionEvent) OnTouchListener 이벤트리스너와 ontouch() 콜백메서드를구현하여처리 제스처감지클래스를이용한사용자이벤트 (CommonGestures) ongesturelistener 인터페이스를구현하는클래스를정의후사용 onfling(), ondown(), onscroll(), onshowpress(), onsingletapup(), onlongpress() 더블탭은 ondoubletaplistener 인터페이스와 ondoubletap() 메소드구현
ios 버튼을이용한사용자인터랙션방법 (EventExample) UIButton 을사용하며 action 메소드를이용함 사용자의인터랙션상황에따라설정가능 (TouchUpInside, TouchDown, DragEnter) 버튼이없이사용자의터치위치, 다중터치에관한이벤트처리 (Touch) View 부분에설정을반드시체크 User Interaction Enabled, Multiple Touch 사용자터치위치확인은 UITouch 클래스를통해확인 (TouchMotion) 제스처감지클래스를이용한사용자이벤트 (Recognizer) UIGestureRecognizer 클래스의 addgesturerecognizer 메소드사용 Tap, Pinch, Pan, Swipe, Rotation, LongPress
Android 두개의각각장면을구성하는 xml 파일을생성해야함 (SceneTransition) 장면전환을위한 transition.xml 파일을만들어애니메이션처리 Transitionmanager 클래스를사용한장면설정및전환 클래스를사용하지않고바로장면을보여줄경우 scene1.enter(); TransitionManager.go(scene1), TransitionManager.go(scene2) ios 두개의각각장면을구성하는 ViewController 클래스를생성해야함 (SceneTransition) 장면전환을위한 Storyboard Segue 를사용함 Custom 장면전환을위한별도의설정필요
Android 여러개의화면을 TabLayour 을통해보여줌 (TabLayoutDemo) 보여주기위한화면들을모두 Fragment(xml 파일 ) 로만듬 액티비티에 TabLayout 과 ViewPager 클래스를추가함 ViewPager 사용을위해 FragmentPagerAdapter 를추가한후아래를설정 getcount() : 사용자에게보여줄수있는페이지프래그먼트의전체개수반환 getitem() : 페이지번호를인자로받아와서관련프래그먼트객체를반환하여보여줌 ios Tab bar Controller 가뷰컨트롤러간의이동을관여함 탭을만들기위한 ViewController 를모두만든후 TabBarController 를연결함 TabBarController 에연결되면각탭에대한제목, 이미지를설정할수있음
Android (CardDemo) 뷰를재사용하면서 Resource 를줄여주는역할 LinearLayoutManager, GridLayoutManager, StaggeredGridLayoutManager CardView 는 RecyclerView 인스턴스와함께사용하여하나의테이블형태로보여줌 getitemcount() 보여질아이템이몇개인지반환해야함 oncreateviewholder() 뷰홀더객체를생성하고반환 onbindviewholder() 에서는생성한 ViewHolder 에이미지와텍스트데이터를넣은후반환 ios Table 에서 Cell 을재사용하면서 Resource 를줄여주는역할 UITableViewController 과 UITableViewCell 클래스를사용함 재사용을위한셀재사용식별자선언필요
Android 특정액티비티를요청하는것으로 extra 를통해데이터전달도가능 (ExplicitIntent) 명시적 (explicit) 인텐트 : 정확히실행할액티비티를지정 () Intent I = new Intent(this, ActivityB.class); i.putextra( myint, 100); startactivity(i); 암시적 (implicit) 인텐트 : url 를전달하며이를실행할수있는액티비티를실행 (ImplicitIntent) 액티비티실행중 명시적인텐트 암시적인텐트 안드로이드런타임 지정한이름의액티비티실행 액티비티가여러개인경우선택사항제시
ios UIApplication 클래스의 sharedapplication 메소드를통해 url 을오픈 URL schemes Safari http, https (In-App: UIWebView) Mail mailto: (MFMailComposeViewController) Phone tel: Text sms: (MFMessageComposeViewController) Maps http://maps.apple.com/?daddr=san+francisco, (MKMapView) Youtube http://www.youtube.com/watch?v=2dsrjxqv90g (UIWebView) itunes http://phobos.apple.com/webobjects/ Code if([[uiapplication sharedapplication] canopenurl:url]) { [[UIApplication sharedapplication] openurl:url]; }
Android VideoView 클래스를사용하며, 제어를위해 MediaController 클래스를첨부해줌 H.263, H.264 AVC, H.264 HEVC, MPEG-4 SP, VP8, VP9 재생가능 setvideopath(string path) : 미디어경로문자열로지정 setvideouri(uri uri) : 문자열대신 Uri 인자로미디어경로지정 start() : 비디오재생시작 stopplayback() : 비디오재생중단 pause() : 비디오재생일시중지 isplaying() : 현재재생중인지여부를확인 (boolean) setonpreparedlistener(mediaplayer.onpreparedlistener) : 재생준비시콜백 setonerrorlistener(mediaplayer.oncompletionlistener) : 에러발생시콜백 setoncompletionlistener(mediaplayer.oncompletionlistener) : 끝도달시콜백 getduration() : 비디오의재생시간반환 getcurrentposition() : 현재의재생위치를정수값으로나타냄 setmediacontroller(mediacontroller) : 컨트롤러들을보여줌
Android (VideoPlayer) MediaController 클래스 setanchorview(view view) : 콘트롤러가고정될뷰지정 show() : 컨트롤러를보여줌 show(int timeout) : 1/1000 초단위로지정된시간동안컨트롤러를보여줌 hide() : 컨트롤러숨기기 isshowing() : 컨트롤러를현재보여주고있는지여부 (boolean) 코드구현 1. videoview 추가 2. oncreate() 부분에 videoview 를불러온후주소지정후시작 videoview.start(); 3. 그리고제어를위해 MediaController 를추가해줌 4. 매니페스트파일에인터넷주소사용이라는부분을추가해줌 <uses-permission android:name= android.permission.internet />
ios (VideoPlayer) MKMoviePlayerController 클래스를이용.mov,.mp4,.mpv,.3gp, H.264 Baseline Profile Level 3.0, MPEG-4 Part 2 video 지원 NSURL 로주소를지정후 MKMoviePlayerController 객체에적용 동영상플레이종료시종료에해당하는메시지를 NotificationCenter 를통해전달 controlstyle 설정가능
Android (CameraApp) 비디오녹화인터페이스를애플리케이션에서호출 녹화종료후비디오를포함하는미디어파일의참조를인텐트가전달함 인텐트가전달되면서제어가다시기존애플리케이션으로돌아옴 카메라사용유무 : PackageManager.hasSystemFeature() 메서드사용 전면카메라 : PackageManager.FEATURE_CAMERA_FRONT 후면카메라 : PackageManager.FEATURE_CAMERA 1. 비디오캡쳐인텐트호출, putextra() 파일저장될위치지정 Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 2. 녹화를완료하고나면 onactivityresult() 메서드가자동호출됨 이미지캡처인텐트호출 ( 내장카메라로정지사진찍을때사용 ) Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ios UIImagePickerController 클래스를사용함 ( 예제 x) 3 개의미디어소스사용가능 UIImagePickerControllerSourceTypeCamera UIImagePickerControllerSourceTypeSavedPhotosAlbum UIImagePickerControllerSourceTypePhotoLibrary UIImagePickerController 사용후카메라 / 앨범화면이사라지면나머지동작수행 -(void)imagepickercontroller:(uiimagepickercontroller *)picker didfinishpickingmediawithinfo NSDictionary *)info { }
Android 안드로이드 SQLite 데이터베이스와데이터처리 Google cloud 스토리지엑세스 Google map KeyguardManager 와 FingerprintManager 를이용한지문인증 Google Play in App 결제 ios 코어데이터, SQLite 데이터베이스와데이터처리 icould 저장소엑세스 MapKit 과 MKMapView 지도및길찾기, 경로 (MKDirections) Local Authentication 프레임워크를이용한 Touch ID SKPaymentTransactionObserver, SKProductsRequestDelegate 를이용한 in App 결제