728x90
반응형
- manifest 에 퍼미션 추가하기
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>
- 다른앱위에 그리기 권한 획득하기
- 권한요청을 위해 startActivityForResult 를 사용하지만 앞으로 사용을 권장하는 registerForActivityResult 를 사용
아직 안정화버전에 배포되지 않아 알파 또는 베타버전을 활용해야 한다.
private val overlayActivityResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (Settings.canDrawOverlays(this)) {
if (floatingView.parent == null) windowManager.addView(floatingView, param)
}
}
private fun show() {
if (Settings.canDrawOverlays(this)) {
if (floatingView.parent == null) windowManager.addView(floatingView, param)
} else {
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
"package:$packageName".toUri()
)
overlayActivityResult.launch(intent)
}
}
- 뷰 터치이벤트로 이동시키기
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent?): Boolean {
when(event?.action) {
MotionEvent.ACTION_DOWN -> {
dx = wLayoutParams.x - event.rawX
dy = wLayoutParams.y - event.rawY
}
MotionEvent.ACTION_MOVE -> {
wLayoutParams.x = (dx + event.rawX).toInt()
wLayoutParams.y = (dy + event.rawY).toInt()
windowManager.updateViewLayout(this@FloatingView, layoutParams)
}
MotionEvent.ACTION_UP -> {
}
}
return super.onTouchEvent(event)
}
- 뷰 추가/제거 하기
private fun show() {
if (Settings.canDrawOverlays(this)) {
if (floatingView.parent == null) windowManager.addView(floatingView, param)
} else {
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
"package:$packageName".toUri()
)
overlayActivityResult.launch(intent)
}
}
private fun hide() {
if (floatingView.parent != null) windowManager.removeView(floatingView)
}
반응형
'Development > Android' 카테고리의 다른 글
[android] 앱에서 WebView 로드 시 키보드/키패드 노출하기 (0) | 2021.04.05 |
---|---|
[android] 유튜브 백그라운드 재생 정책위반 (0) | 2021.04.05 |
[android] SwipeRefreshLayout 간단하게 사용하기 (0) | 2021.03.29 |
[android] ConstraintLayout chainStyle 활용하기 (packed) (0) | 2021.03.19 |
[android] Retrofit2 과 retryWhen 를 조합하여 어떻게 사용할까? (0) | 2021.03.19 |
댓글