본문 바로가기

ANDROID

(125)
[안드로이드] 남는 모든 액티비티를 종료하고 앱 재시작시 깔끔하게 시작하기 기존에 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..
[안드로이드] 뷰 위에 들어오는 모든 터치 이벤트를 막기 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까지 액티비티 파일에 추가하여 필요한 구성을 모두 완료하였다. 조금 시간이 ..
[안드로이드] 원형 ProgressBar의 색상을 바꾸자 기존 막대형 ProgressBar가 촌스러워 보이는 감이 있어 원형 ProgressBar로 바꿔보고자 했다. 원형 ProgressBar는 스타일에서 테마 뒤쪽에 ProgressBar.Large 를 통해 선택할 수 있는데 여기서 ProgressBar.Large는 반시계방향, ProgressBar.Large.Inverse는 시계방향으로 애니메이션을 진행하게 된다. 여기서 애니메이션 완료 후 완료 아이콘으로 자리를 대체하는 걸로 코드를 짜두었는데 여기서 ProgressBar 색상이 밝은 연두색이라 색이 매치가 안되는 문제가 있었다. styles.xml을 건드려도 보고 코드로도 짜보다가 안되었는데 styles.xml을 건드리는 거 없이 다른 코드로 색상 변경을 성공할 수 있었다. < 레이아웃 ..
[안드로이드] 권한 승인 Thread에서 확인 후 기능 수행하기 Thread에서 설정한 권한들을 주기적으로 확인해주고, 모두 승인이 허가된 것을 확인하는 대로 원하던 기능을 수행하게 끔 하였다. 참조 : https://developer.android.com/guide/topics/ui/dialogs.html?hl=ko http://gun0912.tistory.com/55
[안드로이드] 파일 생성을 위한 권한접근이 되지 않을 때 단순히 앱의 매니페스트에 위와 같은 READ, WRITE EXTERNAL STORAGE permission을 추가해주는 걸로 파일의 오픈이나 생성, 저장이 안될 때는 코드를 통해 권한 요청을 직접 함으로써 원하는 작업들을 수행할 수 있다고 한다. 안드로이드를 쓰면 자주 해보았을 권한 승인등을 만드는 앱 안에서도 하게 만드는 것이다. 참고자료등을 참고하여 간단하게 승인요청을 받고나서 파일 관련된 작업까지 수행할 수 있는 걸 확인할 수 있었다. 아래와 같은 방법으로 권한 승인 여부를 확인해 Alert 창에서 permissionReqjest를 수행할 수도 있다. 참고 : https://www.captechconsulting.com/blogs/runtime-permissions-best-practices-and..
[안드로이드] 액티비티 파일 안에서 Dialog의 EditText 키보드 막기 현재는 방향을 바꾸게 되어 주석처리를 했는데, 다음과 같은 코드로 다이얼로그에 걸어주면 레이아웃 파일을 손댈 것 없이 키보드 자동 팝업을 막을 수 있다. 기존에는 매니페스트 파일이나 어디엔가 선언을 해서 자동 키보드를 막아주고 있었는데 다이얼로그의 경우 매니페스트 파일에 따로 선언을 안해주다 보니 찾게 된 방법이었다. //textDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);