본문 바로가기

[안드로이드] 남는 모든 액티비티를 종료하고 앱 재시작시 깔끔하게 시작하기 기존에 moveTaskToBack(true); finish(); 등의 코드를 통해 앱을 종료하고 있었는데, 재시작시 중간즘에 남아있던 액티비티의 화면으로 시작되는 것을 확인하고 서치를 통해 가장 깔끔한 방법을 알았다. 액티비티간 이동도 필요 없다. 어떤 플래그를 설정해 줄 것도 없다. 단 한문장이면 된다. ActivityCompat.finishAffinity(this); 참고로 참조했던 블로그 원문에서 다른 방식으로도 동일하게 액티비티를 종료해줄 수 있는데, apk 버전에 따라 호환되지 않는 경우도 있다 하여 apk 16 아래로도 사용 가능하다는 방법을 사용했다. + 추가(190405) System.exit(0)으로 앱을 종료시킬 수도 있는데, 이렇게 종료할 경우 앱과 관련된 프로세스나 블루투스 기기등을..
[안드로이드] OPENGL ES 뷰를 비트맵으로 저장해 이미지뷰에 출력하기 안드로이드에 opengl로 그리는 뷰가 액티비티 전체를 큰 이미지로 저장할 땐 출력되지 않는다는 사실을 알고 다급히 OpenGL 뷰를 비트맵으로 저장하고, 이를 이미지뷰에 출력해 전체 액티비티와 함게 저장이 되도록 했다. 참고자료에서는 boolean 변수를 통해 스크린샷을 저장했는데, 나는 특정 조건을 충족할 때 다른 그래픽을 모두 그리고 나면 스크린샷을 캡처할 수 있도록 void 함수로 정의하였다. 결과는 성공이다. 리사이징 문제만 해결하면 출력되는 그래픽과 동일한 비트맵을 이미지뷰에 출력할 수 있으리라 본다. copy한 버퍼를 저장하고자 static 비트맵 footprint를 정의하였고 이를 이미지뷰에 이미지뷰변수.setImageBitmap(footprint); 로 적용할 수 있다. 참조 : http..
[OPENGL ES] 안드로이드 액티비티 이동간 출력해 준 그래픽 유지하기 뷰에 그래픽을 출력하는 건 문제가 없는데 이를 액티비티 이동간 보전해야 하는 문제가 있었다. 그러니까 한번 다른 액티비티를 다녀오고 나면, 액티비티가 pause 되었다가 resume 되는데, 여기서 view가 보전되지 않고 까맣게 날아가버리는 게 문제였다. 해결법으로 onPause와 onResume을 오버라이드 하여 onPause시 그래픽을 출력하는 뷰에 똑같이 onPause, onResume시에도 마찬가지로 뷰에 onResume을 적용하면 기존 출력해 준 뷰를 유지하는 걸 확인할 수 있었다 :) 참고 : https://stackoverflow.com/questions/9341705/android-how-to-properly-suspend-opengl
[JAVA] 입력된 데이터의 범위값을 새롭게 조정할때 remap 공식을 쓰자 만약 a부터 b까지의 범위로 들어오는 데이터가 있는데, 이를 보내는 쪽에서 조절해 줄 수 없고 받는 쪽에서는 A부터 B까지의 범위로 늘리고 싶다면 간단한 공식을 통해 이를 해결할 수 있다. A + (value - a) * (B - A) / (b - a) value는 기존에 들어오는 데이터로, 위 공식의 결과값은 리매핑된 데이터 값이 된다. 자바에 다른 리매핑 함수가 있는지는 잘 모르겠지만, 이 공식을 간단히 코드를 통해 구현하는 것 만으로 원하는 리매핑 값을 구할 수 있게 된다. 주의할 점은 기존에 입력값의 범위, 즉 a부터 b까지의 데이터 범위를 제대로 알고 사용해야 올바른 리매핑 값이 도출된다는 것이다. 예를들면 a부터 b까지로 범위를 설정했는데 b 이상으로 넘어가는 값이 들어오는 경우 의도한 리매핑..
[안드로이드] 뷰 위에 들어오는 모든 터치 이벤트를 막기 3D 뷰가 터치로 인해 회전하지 않도록 setEnable이니 setFocusable이니 setClickable이니 OnTouchListener를 설정해서 onTouch를 오버라이드 한다느니 다 해봤는데 몽땅 되지 않는다. 하다가 안되서 생각냈던것이 터치를 막고자 하는 뷰 위에 우선순위 높게 뷰를 씌워서 이 뷰를 터치를 막게 해보자, 하던 것이었는데 이마저도 잘 되지 않다가 서치를 통해 이 방법으로 아래 뷰의 터치를 막을 수 있음을 확인했다. 방법은 간단히 포장막처럼 터치를 막고자 하는 뷰와 동일한 크기의 그냥 View를 만들고 여기에 setClickable(true); 를 설정해 주면 된다.
[안드로이드] android.os.FileUriExposedException: file exposed beyond app through Intent.getData(). 해결 파일 오픈을 하는중에 안드로이드 태블릿에선 문제없이 열리던 파일이 폰에서 테스트하니 열리지 않던 문제가 있었다. Exception 내용은 android.os.FileUriExposedException: file exposed beyond app through Intent.getData() 로 서치를 해보니 안드로이드 API 23버전 이상부터는 다른 방법으로 파일을 열어야 한다 정도의 내용이었다. 코드참조를 통해 빌드버전을 확인하고, 버전에 따라 다르게 putExtra 형식으로 추가하였고 여기에 필요한 매니페스트 파일 수정, res 폴더에 xml/ provider_paths.xml 파일 추가 이후 GenericFileProvider까지 액티비티 파일에 추가하여 필요한 구성을 모두 완료하였다. 조금 시간이 ..
[GIT] 이전 commit으로 돌아가 수정작업을 하고 리모트 저장소에 최신 commit으로 올리기 프로젝트 작업을 git을 통해 계속해오다 어디서 뭐가 어긋났는지 되돌리기 버거운 일들이 발생했다. 이를 위해 그동안 수행한 커밋 중에서 기능들이 원활히 돌아가던 커밋을 찾아 코드를 되돌리고, 이 코드를 바탕으로 다시 개발을 진행한 뒤 이를 최근 커밋으로 리모트 저장소에 올리고자 하였다. 서치를 좀 해보니까 commit을 직접적으로 최신 commit으로 바로 올려버리는 건 쉽지 않고, 이전 커밋으로 되돌아간 뒤 이를 최신 master와 merge해 최신화하는 방법을 통해 이전 커밋을 바탕으로 한 프로젝트 코드를 최신으로 한 새 commit을 push 할 수 있었다. 1. git reset --hard 커밋코드 이 명령어를 통해 현재 수행하고 있는 프로젝트 전체를 커밋코드에 해당하는 프로젝트 내용으로 되돌린..
[안드로이드] 원형 ProgressBar의 색상을 바꾸자 기존 막대형 ProgressBar가 촌스러워 보이는 감이 있어 원형 ProgressBar로 바꿔보고자 했다. 원형 ProgressBar는 스타일에서 테마 뒤쪽에 ProgressBar.Large 를 통해 선택할 수 있는데 여기서 ProgressBar.Large는 반시계방향, ProgressBar.Large.Inverse는 시계방향으로 애니메이션을 진행하게 된다. 여기서 애니메이션 완료 후 완료 아이콘으로 자리를 대체하는 걸로 코드를 짜두었는데 여기서 ProgressBar 색상이 밝은 연두색이라 색이 매치가 안되는 문제가 있었다. styles.xml을 건드려도 보고 코드로도 짜보다가 안되었는데 styles.xml을 건드리는 거 없이 다른 코드로 색상 변경을 성공할 수 있었다. < 레이아웃 ..