[Java] Activity 화면 방향 회전시 제어하기 (Sensor옵션)


 

지난 시간에 Activity 화면의 방향을 제어하는 방법에 대해서 알아보았습니다. (링크)

 

여기서는 sensor옵션 관련(sensor, fullsensor, sensorLandscape, sensorPortrait) 옵션을 주고 회전시에 화면을 제어하는 방법에 대해서 알아보도록 하겠습니다.

 

Manifest에서 화면의 방향을 제어할 옵션을 준 Activity Class에서 onCreate 함수에

displayManager를 선언해 Listner를 등록해주면 됩니다.

아래는 DisplayManager를 선언하고 Listener를 등록해주는 소스

DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
displayManager.registerDisplayListener(displayListener, null);

 

위 소스를 입력하시면 displayListener가 없다고 에러가 날겁니다.

아래는 우리에게 필요한 Listener(displayListener)를 생성합니다.

DisplayManager.DisplayListener displayListener = new DisplayManager.DisplayListener() {
  @Override
  public void onDisplayAdded(int displayId) {
  	//디스플레이가 시스템에서 추가될 때
  }

  @Override
  public void onDisplayRemoved(int displayId) {
  	//디스플레이가 시스템에서 삭제될 때
  }

  @Override
  public void onDisplayChanged(int displayId) {
  	//디스플레이가 변경될때마다
  }
};

위 선언된 Listener에서 내부 Override된 onDisplayChanged 함수를 이용하시면 Activity가 회전될 때마다 캐치하여 원하는 소스를 실행할 수 있습니다.

 

참조

https://developer.android.com/reference/android/hardware/display/DisplayManager.DisplayListener

 

버전정보 (v1.0)

 - v1.0 2020.06.27 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


[Kotlin, Java] Activity 화면 방향 설정


안드로이드의 Activity 설정 시 Orientation을 지정하는 방법을 설명합니다.

 

AndroidManifest.xml에 Orientation 설정을 바꿀 Activity에 대해 특성 한가지만 추가(수정)해주면 됩니다.

 - android:screenOrientation = "옵션값"

  -> screenOrientation 특성은 Activity의 방향을 설정할 수 있습니다.

  -> 단, Activity가 다중창모드(멀티태스킹, 화면 분할)로 실행이 된다면 이 특성은 무시됩니다.

  -> 옵션값 (자주 사용할만한 옵션값에는 Bold 처리)

 

unspecified behind landscape portrait
reverseLandscape reversePortrait sensorLandscape sensorPortrait
userLandscape userPortrait sensor fullSensor
nosensor user fullUser locked

 

-> 자주 사용하는 옵션값만 설명을 하자면,

 landscape는 Activity를 가로방향으로 고정합니다.

 portrait는 Activity를 세로방향으로 고정합니다.

 sensorLandscape는 Activity를 가로방향으로 고정을 하고, sensor의 값에 따라 반전이 될 수 있습니다.

 sensorPortrait는 Activity를 세로방향으로 고정을 하고, sensor의 값에 따라 반전이 될 수 있습니다.

 sensor의 경우 사용자가 들고있는 방향에 따라 Activity의 방향이 결정됩니다.

  -- sensor 사용시 4방향에 대한 설정이 이루어지지 않는다면 fullSensor를 사용해 보세요.

 

 - AndroidManifest.xml에서 설정하는법.

방향 설정을 원하는 Activity 설정 안에 android:screenOrientation 특성을 주어 원하는 옵션값을 부여합니다.

(원하는 옵션값은 상단에서 선택합니다.)

* Android Studio 3.6 이상에서는 사용자가 screenOrientation을 지정하면 에러를 낼 수 있습니다.

 - 이는 unspecified(default -> 시스템이 방향을 선택)와 fullSensor 이외의 옵션값을 사용할 때 일어나는 문제로, tools:ignore="LockedOrientationActivity" 특성과 옵션값을 주어 에러를 무시할 수 있습니다.(오류 무시)

 

<activity
  android:name=".MainActivity"
  android:screenOrientation="portrait"
  tools:ignore="LockedOrientationActivity">
</activity>

 

참조

https://developer.android.com/guide/topics/manifest/activity-element?hl=ko

 

<액티비티>  |  Android 개발자  |  Android Developers

Declares an activity (an Activity subclass) that implements part of the application's visual user interface. All activities must be represented by {@code } elements in the manifest file. Any that are not declared there will not be seen by the system…

developer.android.com

 

버전정보 (v1.0)

 - v1.0 2020.06.26 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com





[Java]안드로이드 권한요청 class


 

어플을 개발하다보면 권한요청을 해야하는 경우가 많이 생깁니다.

특히 센서나, 저장소의 권한을 요청하는 경우가 많은데 이를 조금 더 편하게 사용할 수 있도록 Class로 만들었습니다.

사용방법은 심플합니다.

프로젝트에 .class 파일 넣어주고! 객체 생성해서! 함수한번 실행해주면 끝나게 만들어놨습니다!

(혼자 쓰다가 같이 쓰면 좋을것 같아서..)

 

Github 권한요청 Class : https://github.com/dawon-karzin/Android_PermissionCheck_Java

 

dawon-karzin/Android_PermissionCheck_Java

안드로이드 권한 요청 클래스입니다.(java). Contribute to dawon-karzin/Android_PermissionCheck_Java development by creating an account on GitHub.

github.com

 -> 버그등은 이슈로 남겨주시면 빠른시일내에 수정토록하겠습니다.

 

 - 구조

  • 클래스명 : PermissionCheck
  • 생성자 파라미터 : Activity
  • 내부 함수 :
    •   check(List<String>)
    •   permissionGranted()
  • 실행 방식 :
    • PermissionCheck 객체 생성(생성시 현 Activity를 매개변수로 전달)
    • 권한 요청을 받아야하는 List를 전달하여 check함수 실행
    • check함수 내에서 매개변수로 전달받은 List를 확인하여 권한이 부여되지 않은(Denied) 권한을 List로 생성
    • 이후 permissionGranted 함수를 실행하여 권한이 부여되지 않은(Denied) 권한에 대하여 요청(request)을 함
  • 사용 방법 :
    •   permission처리를 할 activity 상속 클래스에서 PermissionCheck 클래스 선언.
    •   check함수(파라미터로 permission 리스트를 전달) 사용함으로써 유저에게 권한요청 실행
//권한요청을 받을 List 생성
List myPermission = Arrays.asList( new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE});

//권한요청 class 생성 (생성시 지금의 Activity를 매개변수로 전달)
PermissionCheck permissionCheck = new PermissionCheck(this); 

//권한요청 시작(권한요청을 받아야하는 List를 매개변수로 전달)
permissionCheck.check(myPermission);

 

-> 개인적으로 개발할때 class 옮겨가며 사용하는 중인데, 생각해보니 permissionDeniedList 변수를 왜 전역으로 선언 했는지 기억이 안나네요;; 무언가 이유가 있었던 것 같은데....... 졸면서 해서그런가;;; (나중에 생각나면 업데이트 해놓겠습니다.)

 

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른시일내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


[Kotlin]Toast 사용하기


간혹 유저에게 간단한 메세지를 전달해주기위해 Toast를 사용하는 경우가 있습니다.

이런 경우를 위해 Kotlin에서의 Toast 사용법을 알아보겠습니다.

 

- 기본 형태

Toast.makeText(context, text, duration).show()

 > context(Context)는 현재 Activity의 context를 전달해주시면 되며,

 > text(String)는 Toast에 띄우고 싶은 String형식의 text를,

 > duration(Int)은 Toast를 얼마나 긴 혹은 짧은 시간동안 보이게하고 싶은지를 의미합니다.

 > duration의 경우 Toast.LENGTH_SHORT 및 Toast.LENGTH_LONG을 사용할 수 있으며 각각 0과 1로 대치됩니다. (즉, 0 혹은 1로 넣어도 동작)

 > SHORT는 4000ms(4초), LONG은 7000ms(7초) 입니다.

 

 > *makeText 후 show를 사용하지 않으면 Toast는 보이지 않습니다.

 

 - 예시

Toast.makeText(this, "토스트 테스트_짧게", Toast.LENGTH_SHORT).show()
Toast.makeText(this, "토스트 테스트_길게", Toast.LENGTH_LONG).show()

위는 비교적 간단한 예시이며, duration부분의 SHORT와 LONG의 차이로 Toast를 짧은 시간 혹은 긴 시간동안 보이게 해주는 예시입니다.

 

 - 간단하게 함수를 이용하여 Text만 받아 사용하기

private fun shortToast(text:String) {
	Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}

private fun longToast(text:String) {
	Toast.makeText(this, text, Toast.LENGTH_LONG).show()
}

 - 사용법 :

  shortToast("안녕! Karzin!")

  longToast("안녕! Karzin!")

 

 *** Reference : https://developer.android.com/reference/android/widget/Toast

 

Toast  |  Android 개발자  |  Android Developers

Toast public class Toast extends Object java.lang.Object    ↳ android.widget.Toast A toast is a view containing a quick little message for the user. The toast class helps you create and show those. When the view is shown to the user, appears as a floating

developer.android.com

 *** 소스에 문제가 있을 시 댓글달아주시면 최신화하도록 하겠습니다. 감사합니다.


[Kotlin]Activity 전체화면 처리


예전에는 뭔가 AndroidManifest.xml에서 android:theme의 설정을 조금 만져주면 되었던걸로 기억하는데(개발한지 오래되서 맞는지는..) 최근버전에서는 많이 달라진것같네요.

 

전체화면모드가 생겨서 lean back, Immersive, sticky immersive라는 3가지 옵션으로 앱의 전체화면을 컨트롤하는 모양입니다.

 

private fun fullScreen(fullScreenOption : Int) {
  window.decorView.systemUiVisibility = (
    fullScreenOption
    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_FULLSCREEN )
}​

 - fullScreenOption은 전체화면의 옵션을 설정해주기위한겁니다.

 - Immersive, sticky immersive

 - Immersive 옵션 : View.SYSTEM_UI_FLAG_IMMERSIVE

 - sticky immersive 옵션 : View.SYSTEM_UI_IMMERSIVE_STICKY

 - 위 두 옵션은 상태표시줄이나, 탐색메뉴를 없애 전체화면으로 만들어주며, 필요시 아래나 위에서 스와이프 동작을 하면 상태표시줄과 탐색메뉴가 동시에 보이게 됩니다.

 - 다만 sticky immersive옵션을 주면 상태표시줄이나, 탐색메뉴가 불투명하게 보이며, 스와이프 후 일정시간이 지나면 다시 전체화면으로 돌아가지만, Immersive옵션의 경우 스와이프 후 상태표시줄과 탐색메뉴가 불투명하지 않고, 일정시간이 지나도 계속 존재함을 확인하실 수 있습니다. (촬영 등에 탐색이벤트를 사용할일이 적은 Activity에 적합해보입니다.)

 - 만일 lean back 옵션을 주고 싶다면, fullScreenOption 매개변수를 지워주시면 됩니다. (lean back 옵션의 경우 Activity를 터치하면 상태표시줄과 탐색메뉴가 나오게됩니다. - 유저가 동영상을 보다가 어떠한 탐색 이벤트 등을 발생하고 싶을때 적합한듯 보입니다.), 아래 예시 참조

private fun fullScreen() {
  window.decorView.systemUiVisibility = (
    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_FULLSCREEN )
}

 

 - 위 함수는 onWindowFocusChanged 함수안에서 실행해주면 됩니다. (아래 예제 참조)

override fun onWindowFocusChanged(hasFocus : Boolean) {
  super.onWindowFocusChanged(hasFocus)
  if(hasFocus) fullScreen(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
}​

 - onWindowFocusChanged함수는 Activity의 선택(Focus)여부를 확인하는 함수입니다. (override하여 사용하시면 됩니다.) 

 - Activity가 포커스 되면 fullScreen이 되는 형식입니다.

 - lean back 옵션의 경우 매개변수를 넘겨주지않으면 됩니다.

  >> fullScreen()

 

 *** Reference : https://developer.android.com/training/system-ui/immersive?hl=ko

 

전체 화면 모드 사용 설정  |  Android 개발자  |  Android Developers

동영상, 게임, 이미지 갤러리, 책, 프레젠테이션 슬라이드 같은 콘텐츠를 이용하기에 최적의 환경은 전체 화면입니다. 이 페이지에서는 전체 화면에서 사용자를 콘텐츠에 더욱 몰입하게 하는 방법과 사용자가 앱을 실수로 종료하지 않도록 하는 방법을 설명합니다. 앱에 화면 공간을 최대한 활용하겠다는 단순한 이유로 전체 화면 모드를 사용 설정하려고 할 수 있습니다. 하지만 사용자가 알림 확인이나 즉흥적인 검색 등을 위해 얼마나 자주 앱을 시작하고 종료하는지 고려해야

developer.android.com

 *** 소스에 문제가 있을 시 댓글달아주시면 최신화하도록 하겠습니다. 감사합니다.

 

 


[Kotlin]안드로이드 권한 요청


 

 

권한요청은 JAVA 버전도 만들었었지만 이번에 개발하는 Kotlin(이하 코틀린)에서 사용할 권한 요청을 정리해 보았습니다. (JAVA는 추후에 다시)

 

1. JAVA와 동일하게 AndroidManifest.xml에서 권한을 요청할 permission을 지정해줍니다.

 예 ) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

      //저장소 쓰기에 대한 권한 요청

2. PermissionCheck Class (아래 소스코드 참고)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    public fun permissionCheck() {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 - 첫번째 매개변수는 Activity를 넘겨받으며, 두번째 매개변수는 Array 즉, 권한요청할 permission의 배열을 받아옵니다.

 - permissionCheck 함수를 돌려주면 permission 배열내에서 권한승인이 되지않은 권한을 모드 failRequestPermissionList 로 담아줍니다. 담아준 결과는 Empty 즉, 빈값이 아니라면 권한을 요청하게됩니다.

 

3. 실행할 위치에 권한요청할 permission의 Array를 생성해주고(아래 requestPermissions), PermissionCheck 클래스의 permissionCheck 함수를 실행해줍니다.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  val permissionCheck = PermissionCheck(this, requestPermissions)
  permissionCheck.permissionCheck()
}

 

** 만일 permissionCheck 함수를 실행하지 않고 바로 실행하고 싶다면 init 활용 (아래 참조)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    init {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 -> 사용시에는 아래처럼 PermissionCheck 클래스에 매개변수만 담아주면 권한체크가 실행됩니다.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  PermissionCheck(this, requestPermissions)
}

 

*** Reference : https://developer.android.com/training/permissions/requesting?hl=ko

*** 소스에 문제가 있을 시 댓글 달아주시면 최신화하도록하겠습니다.

 


[사용 및 비교]

3종 운영체제 태블릿 비교

(Windows, iPadOS, Android)


미리 요약을 하자면..

태블릿은 역시 아이패드(iPadOS)입니다.

 

* 본 내용은 사용자의 개인취향에 따라 다를 수 있습니다.

* 지극히 개인적인 의견이므로 참고용으로만 읽으시면 될 것 같습니다.

 

사용 디바이스 (소유하거나 사용중)

 - 윈도우 태블릿(ASUS사의 윈도우태블릿과 아이뮤즈사의 뮤패드8.9) [ 약 5년 사용 ]

 - 아이패드 프로 1세대(9.7)_정식키보드 및 애플팬슬 포함 [ 약 2년 사용 (특이사항 : 중고 구입) ]

 - 안드로이드 태블릿(갤럭시탭 10.1 1세대, 갤럭시탭A 10.1(with pen)) [ 약 8년 사용 ]

 

 

들어가며

 스마트폰이 진화하는만큼 태블릿의 역할은 생각보다 많이 줄어들고 있는 추세입니다.

물론 개개인의 사용방식에 따라 달라지겠지만 개인적으로는 점점 커져가는 스마트폰의 화면과 PC와 비교해 많은 차이가 나지 않는 성능(게임과 같은 성능이 아닌 웹 서핑 등을 말하는겁니다.) 등에 의해 태블릿은 그만큼 특정한 경우에서 사용을 하게 되고 있는 상황이죠.

이런 태블릿 시장에서 어떤 태블릿을 고르는게 좋을지 저의 개인적인 사용감에대한 이야기를 하며 어떤 태블릿을 골라야 좋을지를 작성해볼까 합니다.

 

태블릿 사용기

 개인적으로 처음 장만한 태블릿으로는 갤럭시탭 10.1 1세대(안드로이드)였습니다.

처음 구입해서 사용할땐 마냥 좋았지만, 지금 생각해보면 활용은 하지 못한 것 같습니다.

지금은 회사에서 사용중인 갤럭시탭A 10.1을 보면 예전보다는 많이 좋아진 스펙과 활용성에 놀라긴 하지만, 1세대라서 그럴까요? 굉장히 아쉬움만 많았던 기억이 듭니다.

지금이야 갤럭시탭10.1 1세대는 창고행으로 고이 잠들어 계시지만 많은 세대를 거쳐서 어느정도 쓸모 있는 정도까지는 올라온 것 같습니다.

 많은 세대를 거쳐 쓸만해지고, 스펙이 좋아지고.. 그렇다고해서 안드로이드 태블릿이 좋다는건 아닙니다. 사실상 안드로이드 스마트폰에 화면만 키우고 운영체제만 같다는 생각이 드니까 말이죠.

조금 생각을 해본다면 결국 화면의 크기만 다른 스마트폰이라는 겁니다.

'안드로이드 스마트폰에서도 전부 할 수 있는걸 왜 굳이 안드로이드 태블릿에서?' 라는 느낌을 아직까지는 지울수 없다는겁니다.

물론 화면의 크기로 따지면 태블릿이 영상을 볼때만큼은 쾌적합니다.

다만 가끔씩 게임 등 어플들을 실행시켜 보면 해상도의 차이로 깨지는 문제라던가는 아직도 많이 볼 수가 있다보니.. 아직까지는 안드로이드 계열은 태블릿보다는 스마트폰이 조금은 괜찮지 않을까 싶은 생각이 듭니다.

 

 그렇다면 윈도우 태블릿은 어떨까요?

예전에 블로그에 [윈도우 태블릿 이야기 (링크)]라는 글을 작성한 적이 있습니다.

게시글을 참고해보시면 아시겠지만, 윈도우 태블릿에 대한 평가는 예전이나 지금이나 크게 다를바가 없습니다.

'비슷한 가격대의 노트북을 사서 활용을 하는게 낫지 않을까' 하는 생각 말이죠.

용도 면에 있어서 저렴한 노트북과 비교를 하면 정말 애매한 위치라고 생각을 하고 있고, 그만큼 어디에 활용을 해야할지 어려운게 윈도우 태블릿 같습니다.

사실 여기에는 한가지 명시드려야할 점이 있는데, 제가 나누는 윈도우 태블릿안에는 10인치 미만의 윈도우 태블릿입니다. 조금은 헷갈릴 수 있어 예를 든다면 M사의 서피스 북이라던가, L사의 Miix 시리즈의 경우에는 노트북으로 치고 있다는 겁니다.

확실히 얘기를 하자면 물리적 키보드의 호환 유무를 말하는게 되겠네요.

덧붙이자면 저는 L사의 Miix520을 사용중에 있습니다.

펜도, 붙였다 뗏다 할 수 있는 키보드도 굉장히 만족스러워하면서 때론 필기용으로 때론 개발용으로 잘 활용을 하고 있습니다.

발열이 조금 있지만, 어느정도 성능이 나와주기 때문에(i5 8세대 8250u) 약 2년간 대학원에서 또 회사에서 제 파트너로써 굉장히 잘 활용하고 있습니다.

문제는 보통 10인치 미만의 윈도우 태블릿은 체리트레일과 같은 아톰계열의 CPU가 들어가는데, 해당 CPU를 사용함으로써 성능에 의한 문제로 활용성이 굉장히 줄어들게 됩니다.

사실상 이런 문제로 윈도우 태블릿은 조금 아쉽지 않나 싶기도 해요. (그렇다고해서 10인치 미만의 태블릿이 cpu성능이 좋더라도 I/O의 불편함을 생각한다면... 정말 애매한 부류지 않나 싶습니다.)

 

 마지막으로 아이패드는 어떨까요?

개인적으로 아이패드의 경우 초반에는 활용성을 찾지 못하고 있다가, 최근에는 굉장히 활용하게 된 계기가 생겨서 나름 즐겨찾고있는 친구(기기)중 하나가 되었습니다.

계기가 바로 iPadOS의 출현인데요, 기존의 iOS는 안드로이드 태블릿과 안드로이드 스마트폰과 마찬가지로 별다른 차이점이 없어 큰 매력을 찾지 못하다가, iPadOS가 따로 개발이 되면서부터 멀티태스킹(동시 두개 앱, slide over 등)이라던지 최근에는 side car 기능, 그리고 기존에서부터 지원을 하던 연속성기능으로 맥북 및 아이폰을 연동하여 사용할 수 있는 활용성이 무궁무진해졌습니다. (물론 안드로이드도 누가버전부터 멀티태스킹은 지원을 하고 있습니다.)

어떻게 보면 여기에는 apple의 클라우드 연동 기능이 크게 관여하지 않았나 싶을 수 있지만, 이를 포함해서 가장 태블릿의 위치를 잘 나타내고 있는 기기가 아닐까 하는 생각을 하게됩니다.

더욱이 최근 새로운 세대로 넘어오면서 물리키보드의 사용 여부를 사용자가 선택(구매)하여 활용할 수 있게됨에 따라 스마트폰에서는 작업하기 어려운 간단한 문서작업이라던지, 가벼운 영상편집과같은 작업에도 활용이 가능하다는점이 저에게 있어서는 아이패드를 추천하는 부분에 크게 작용하게되었습니다.

또한 아이패드의 장점 중 하나인 운영체제 지원의 기간을 생각해본다면 더더욱 추천을 해주고 싶은 이유가 되겠는데요, 이는 약 2개(약 2년)의 큰 운영체제 업그레이드를 지원해주는 안드로이드 태블릿보다 아이패드의 경우에는 여러번 지원을 해주는 운영체제가 가장 매력적이지 않을 수가 없습니다.

운영체제의 지원이 길다면 그만큼 보안의 문제성도 운영체제 지원기간과 동일하게 잊고 살 수 있으며, 또 새것과 같은 느낌을 주는 운영체제 업그레이드는 아이패드의 가장 큰 장점이 아닐 수 없는데요, 여기에 안드로이드 특유의 <사용을 하다보면(년식이 쌓이면) 버벅이는> 느낌을 아이패드에서는 몇년을 사용하더라도 새것과 같이 빠릿빠릿한 느낌을 받을 수 있어 개인적으로는 윈도우태블릿vs안드로이드태블릿vs아이패드의 구도에 있어서는 아이패드를 추천할 수 밖에 없습니다.

 

 -> 물론 개인적인 생각과 사용감이므로 안드로이드 태블릿이 더 좋다고, 윈도우 태블릿이 더 좋다고 하시는 분들의 의사도 존중합니다.

 -> 사람마다 느끼는 부분은 다를 수 있으며, 상황에 따라서 사용하기 적합하다 라고 생각할 수 있는 부분도 있을테니까 말이죠.

 

마무리하며

재잘재잘 설명을 하다보니 글이 많이 길어져버렸네요.

사실상 좋은 설명이 되었는지도 모르게 생각나는대로 글을 적어버렸더니 두서없는 글이 되어버렸습니다.

나름 각 태블릿도 체계를 유지하며 각 장점들을 쌓아 올리고 있지만, 개인적인 견해와 관점으로만 너무 아이패드에만 마냥 좋다고만 쓰지 않았나 싶기는 합니다.

그래도 나름 소비자 입장에서는 긴 사후지원과 오래써도 괜찮은 제품을 생각한다면 이렇지 않을까 싶어서 쓰게 되었구요,

특히 3종 태블릿을 사용함에 있어서 불편했던 점들과, 또 그만큼 가격면에 있어서도 어떤 제품이 더 가성비가 좋았는지를 부각시켜서 설명을 하려다보니 주저리주저리 써내려가게 된 것 같습니다.

정답이라는건 없고, 저의 생각만을 강요하는건 아니지만, 저의 개인적인 생각이 기기 구매 등의 결정에 있어 나름 많은 도움이 되셨으면 합니다.

 

글을 읽어주셔서 감사합니다.



Project 다원 정리


다원 ERP (Core_java)

다원 원격 마우스 (Android)

다원 원격 키보드 (Android)

다원 원격 키보드&마우스 (Android)

다원 PPT원격 리모콘 (Android)

다원 영상편집 (iOS)



오늘은 Project [다원]을 정리하는 시간을 갖도록 하겠습니다.



가끔씩 물어보는 분들이 계십니다. [다원]이란게 뭐냐?


별다른 의미는 없어요 ㅎㅎ 그냥 프로젝트 명을 정하기 힘들어하다가 우리말이었으면 좋겠다는 생각에 여기저기 찾아보다가 다원이라는 우리말이 너무 맘에 들어 사용하게 되었습니다.


그래도 굳이, 왜 [다원]일까? 싶은데, 제가 생각하기로는 모두가 다 원하기도하고, 사랑하는 프로젝트가 되었으면 해서 사용한것도 이유중 하나가 될 것 같습니다.



[다원]이라는 말은 순 우리말로,


다원 - 모두가 다 원하는, 모두가 다 사랑하는 사람


이라는 의미를 가지고 있습니다.



자, 그럼 [다원] 프로젝트 내에 있는 항목들을 살펴 보도록 하겠습니다.


- 다원 ERP (Core - java)

- 다원 원격 마우스 (Android)

- 다원 원격 키보드 (Android)

- 다원 원격 키보드 & 마우스 (Android)

- 다원 PPT 원격 리모콘 (Android)

- 다원 영상편집 (iOS)


6가지의 항목이 있습니다. 앞으로 계속해서 추가될 예정입니다만, 몇가지는 병합되거나, 사라질 수 있음을 미리 공지해드립니다.


참고로 [다원]은 개인 프로젝트입니다. 저 혼자 진행하고 있는 만큼 진행속도가 많이 더딜수 있습니다.



그럼, 하나씩 살펴보도록 하겠습니다.


 - 다원 ERP : ERP Core를 만들고 있습니다. java로 만드는 만큼 Spring등에서 활용이 되도록 할 예정입니다.

 - 다원 원격 마우스 : 오래된 스마트폰 등을 마우스로 사용하면 어떨까 싶어 진행중인 프로젝트중 하나입니다. Android로 제작 후 시간이 될 때 iOS도 지원할 예정입니다.

 - 다원 원격 키보드 : 마우스와 마찬가지로 키보드만 지원되게할 예정입니다.

 - 다원 원격 키보드 & 마우스 : 상단의 두 항목과 합칠까 고민하고 있으며, 키보드와 마우스를 복합적으로 사용할 수 있는 어플을 생각하고 있습니다.

 - 다원 PPT 원격 리모콘 : 가끔 PPT를 이용하여 발표를 할 때가 많은데, 이럴때 스마트폰을 이용하면 어떨까 싶더라구요. 그래서 진행중인 항목입니다. 물론 Android를 먼저 제작한 후 이후에 시간이 될 때 iOS도 지원할 예정입니다.

 - 다원 영상편집(iOS) : iOS에서 기본적으로 지원하는 라이브러리가 괜찮은게 많은거 같아 무료로 제작할 예정입니다.


추가로 문의사항이 있으면 댓글을 달아주시면 감사하겠습니다^^

+ Recent posts