프로그래밍 80

[android] Android 11, targetSdkVersion 30 전화번호 읽기 권한 READ_PHONE_STATE, READ_PHONE_NUMBERS

우선 Android 11의 권한 업데이트 관련 글을 읽어보자. Android 11은 파일접근, 전화번호 읽어오기, 이번만 허용 등 보안관련 사항이 많이 변경 되었다. developer.android.com/about/versions/11/privacy/permissions?hl=ko Android 11의 권한 업데이트 | Android 개발자 | Android Developers Android 11에서는 사용자가 위치, 마이크, 카메라에 관해 더욱 세분화된 권한을 지정할 수 있습니다. 또한 시스템은 Android 11 이상을 타겟팅하는 사용하지 않는 앱의 권한을 재설정하며 앱은 시스 developer.android.com 즉, 폰의 전화번호를 읽어오기 위해서 이제부터는 READ_PHONE_NUMBERS를..

git clone branch (브랜치 이름으로 내려받기)

특정 브랜치를 내려 받고 싶을 때, $ git clone -b {branch_name} --single-branch {저장소 URL} 그런데 위처럼 하게되면 브랜치 이름으로 폴더가 생성되지 않고 원격 저장소 이름으로 생성된다. 따라서 브랜치 이름으로 내려 받거나 다른 이름으로 내려 받고 싶다면 맨 뒤에 '폴더명'을 직접 지정하면 된다. $ git clone -b {branch_name} --single-branch {저장소 URL} {폴더명}

프로그래밍/git 2021.01.26

[android] 안드로이드 빠른 스플래시 처리 (#splash)

앱을 처음 켜면 잠시동안 하얗게 나오는 순간이 있다. 혹시라도 폰에 부하가 걸려서 조금이라도 버벅이면 하얀 화면이 꽤나 오랫동안 노출되기도 한다. 그러다가 스플래시는 보이지도 않고 화면이 바로 넘어갈 때도 가끔 있다. 대부분 SplashActivity의 onCreate()안에 setContentView(R.layout.activity_splash)를 넣을 경우 이런 현상이 발생하게 되는데, AndroidManifest에 style을 적용하면 이 같은 현상을 방지할 수 있다. res/drawable/splash.xml styles.xml AndroidManifest.xml

[kotlin] 안드로이드 권한처리 onRequestPermissionsResult (한번에 여러개 요청, 다시묻지않기 체크)

android 6.0 마시멜로부터 런타임 권한 처리가 추가되었다. 예를 들어서 카메라와 갤러리를 호출하기 위해서는 접근 권한이 필요한데, 6.0 이전까지는 AndroidManifest에 사용할 permission만 추가하면 되었지만 이제는 앱 사용 중 실제로 접근하는 시점에 권한을 허용했는지 체크하여 처리를 해야한다. 카메라, 갤러리 뿐만 아니라 전화번호부 읽어오기, 직접 전화 걸기 등 앱을 사용하면서 체크해야 할 권한의 종류가 굉장히 많은데, 카메라와 사진첩(갤러리) 접근 권한으로 안드로이드 권한처리에 대하여 알아보자. 1. AndroidManifest.xml 파일에 선언 2. 권한요청 fun requestPermissions(): Boolean { if(ContextCompat.checkSelfPer..

[kotlin] for문 다양한 사용법

코틀린 문법은 전체적으로 직관적이다. 하지만 c 나 c++, java와 같은 과거의 코드 방식에 적응되어 있는 경우 종종 헷갈린다. 어렵지 않으니 정리나 좀 해보자. 1. for문 0 ~ 9까지 (1씩 증가) // java for(int i = 0; i < 10; i++) { } // kotlin for(i in 0 until 10) { } 2. for문 0 ~ 10까지 (1씩 증가) // java for(int i = 0; i = 0; i -= 2) { } // kotlin for(i in 10 downTo step(2)) { } 6. array 배열 (Foreach) // java int array[] = {0, 1, 2, 3, 4}; for(int data : array) { } // kotlin ..

티스토리(tistory)에 애드센스 인피드 광고 다양하게 넣기 (#AdSense #inFeed)

'인피드(infeed) 광고'란 말 그대로 feed 안의 광고다. 즉, 게시물 목록 사이에 광고를 넣는다는 의미. 구글 애드센스 관리자 페이지에서 미리 만들어놓은 인피드 광고의 코드를 티스토리에 적용해보자. 먼저, 티스토리 관리자 메뉴의 '스킨편집 > html 편집' 을 열어 다음은 태그를 찾는다. 아마 여러개가 나올텐데, 태그로 감싸여져 있는 를 찾아야 한다. 일반적으로 html은 이렇게 쌍으로 되어있다는 것만 알자. . . . . . . --->> 여기에 인피드 광고 코드 넣을 것임!!!! . . . 예시1) 6개의 게시글 중에서 2번째에 넣고 싶다. . . . . . . 예시2) 6개의 게시글 사이에 광고를 2개 넣고 싶다. . . . . . . 만약, 원하는 순서에 광고를 자유자재로 넣고 싶다면 ..

프로그래밍 2021.01.11

[kotlin] 커스텀 리스너(Custom Listener)를 람다(Lamda) 형식으로 사용하기

[java에서의 사용방법] java에서는 콜백 즉, 어떠한 이벤트를 받아 오기 위해 리스너를 사용하는데 형태는 아래와 같다. 1. DataChangeListener 라는 커스텀 리스너 interface 생성 (MyCustomView.java) public class MyCustomView extends View { DataChangeListener dataChangeListener; interface DataChangeListener { void onChanged(int index, String value); } public MyCustomView(Context context) { super(context); } public void setOnDataChangeListener(DataChangeListe..

[android] 강제 회전 시키기 #screenOrientation (portrait <---> landscape)

대부분의 앱은 세로모드(portrait)로 고정해서 개발을 하는데, 필요할 때 가로(landscape)로 전환해야 할 때가 있다. 폰의 회전에 따라서 자동으로 바뀌는 것이 아니라 회전과는 무관하게 그냥 가로모드/세로모드를 변경해야 할 때가 있다는 것이다. 1. 자동회전이 아닌, 강제로 가로/세로로 바꾸게 되면 onConfigurationChanged(newConfig: Configuration) 함수가 호출되지 않고 onCreate(savedInstanceState: Bundle?)로 진입되어 화면을 새롭게 그려야 한다. 그렇기 때문에 반드시 android:configChanges="orientation|screenSize" 를 지정해 주어야 한다. 2. 회전되었을 때 onConfigurationChan..

[android] 안드로이드 ImageView gif 적용하기 (feat. Glide)

안드로이드 앱을 만들때, gif를 출력하기 위해서는 라이브러리를 사용해야 한다. 그 중에서 쉽고 편한 Glide 라이브러리를 이용해보자. 1. res 디렉토리에 raw폴더를 추가하여 gif 파일을 넣는다. 즉, 'main/res/raw' 에 gif 파일 추가. 2. build.gradle(:app)에 glide 모듈 추가 implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' 3. xml에는 별거 없이 그냥 ImageView를 선언 4. 코드 적용 Glide.with(this).load(R.raw.loading).override(200, 200)...