728x90
반응형

안녕하세요.

이번에 송도에서 파충류 페스티벌을 한다고 해서 아이들을 데리고 다녀왔습니다.

저희는 일요일에 예약을 해서 1시간넘는 거리지만 잘 다녀왔습니다.

 

우선 가기전에 토요일에 다녀오신 분들의 리뷰를 확인하고 출발을 했는데, 너무너무 리뷰들이 안좋아서 사실 걱정을 굉장히 많이 했고 환불도 알아봤었네요...

 

하지만 결국 환불은 못했고 그냥 들어가자 해서 구경했습니다.

 

도착했는데 저희 생각보다는 사람이 좀 적어서 다행(?)이라고 생각했네요.. 

 

 

입구에 진입하고 풍경입니다.

가장 걱정되는 리뷰중에 하나가 그 가격에 비해서 매우 아깝다 부터, 전부다 판매상인들 뿐이라고 해서 이미 짜증? 난 상태로 들어 갔습니다.

 

일단 생각보다 작았지만 하나하나 구경 해보기로 했어요.

사진 찍은게 좀 많아서 몇개 추려서 올려 보겠습니다.

 

 

 

 

 

대부분이 이렇게 통에다가 가격을 적어 놨더라구요.

728x90

 

 

 

 

 

 

대부분이 이런식이고, 여러가지 사육통부터 다양하게 있었습니다.

 

가격은 정말 다양했어요.

파충류는 정말 1만원 부터 몇백만원까지 있더라구요.

 

직접 만져볼 수도 있고 아이들이 좋아할 만한 것은 있었습니다.

대부분이 도마뱀이였고 일부 다른 설치류? 같은것과 뱀이 있었네요.

 

이렇게 소라개도 파는데..가격이..ㅎㄷㄷ입니다...

반응형

 

 

 

제일 앞으로 가면 로블록스? 이런 게임도 하는데.. 솔직히 이건 왜 하는지 이해가 되지 않더군요.. 차라리 좀 더 다양한 부스를 만들던지 아님 체험관을 만들던지 했으면 좋았을 것을...

또 쉴 공간이 없어서 저렇게 바닥에 많이들 앉아 있어요!

 

 

그리고 먹을 것.....뭐 대부분 분식인데.. 가격은 쏘쏘 맛은 쏘쏘 맛없는 것도 있습니다.

이렇게 할거면 차라리 푸드트럭을 하지..

 

계산하는곳도 너무 허접하고.. 아쉬운 부분중에 하나 였습니다.

 

마지막에 다흑님이 오셔서 싸인회 하셨고 아쉽게도 100명 선착순.. 근데 이거 어디서 나눠준거지... 도대체.. ㅠㅠ

 

또 마지막으로 마술쇼 보고 왔는데.. 마술쇼가 최고였다는...ㅎㅎㅎ

 

마지막으로 주차장은 전체적으로 넉넉했고 만약에 차량이 크다면 (높이) 지상주차장 막혀도 들여보내줍니다.

만차라고 해도 주차공간이 있었어요.!!

 

주차비는 할인 안되서 9천원 나왔고, 11시정도 부터 2시30분까지 있었습니다.

 

일단 전체적으로 만족스러운 편이긴 했는데, 토요일에 사람 진짜 많았을 것으로 보아.. 사람 많다면 저라도 욕했을 겁니다.

 

그리고 이건 페스티벌보단 그냥 단순 박람회 수준이였어요.

그거에 비해서 돈은 좀 아까운 편일수도 있습니다.

 

처음하는 페스티벌이라고 들었는데 많이 부족한 부분은 있습니다. 

개인적으로 만족스러울 수도 있지만 돈을 생각하면 또 만족스럽지는 않네요.. 이건 개인의 판단에 맡겨야 할거 같습니다.

다음엔 먹거리는 좀 푸드트럭으로 합시다!!, 그리고 쉴공간!!, 체험부스같은것도 좀!! 

728x90
728x90
반응형

안녕하세요.

이번 프로젝트 관련해서 서비스와 클라이언트간의 통신시 서비스가 종료 되면 다시 재 실행이 되고 클라이언트는 서비스와의 연결을 유지 해야 합니다.

 

원치 않게 연결이 끊길 때 클라이언트가 자동으로 서비스와 다시 연결을 시도 해야 합니다.

여러가지 방법이 있을 수 있겠지만 intent로 처리하는 방법을 사용 하였습니다.

728x90

Service

 //서비스가 재 실행 되었을 때 해당 intent를 client에게 전달 한다.
private fun sendRestartService() {
    val intent = Intent("com.example.restartService")
    sendBroadcast(intent)
    Log.i(TAG, "sendRestartService!")
}

//sendRestartService를 호출 하는 부분
class MyService: Service() {
	override fun onCreate() {
    	sendRestartService()
    }
}

물론 위 서비스 말고 Activity에서 하고 싶은 경우는 MainActivity에서 하면 됩니다.

 

 

Client

class MainActivity {
	override fun onCreate() {
    	connectService()	//서비스 연결
        registerReceiver(connectionReceiver, IntentFilter("com.example.restartService"),
            RECEIVER_NOT_EXPORTED
        )
    }
    
    private val connectionReceiver = object: BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            Log.i(TAG, "onReceive")

            //서비스가 재 실행이 되면 intent로 해당 action값을 보내서 있는 경우 현재 클라이언트에게 알려주며
            //맞는 action값이 들어오면 서비스에게 다시 연결을 시도 한다.
            if (intent?.action.equals("com.example.restartService")) {
                Log.i(TAG, "서비스가 재시작되었음.")
                connectService() 서비스 연결
            }
        }
    }
}

클라이언트에서의 설정입니다.

기본적으로 서비스가 시작되어 있는 상태에서 클라이언트가 실행 되었을 때 자동으로 서비스 연결을 시도하고

intent값을 등록 합니다.

이후 서비스가 종료 후 다시 시작 되면 서비스에서 com.example.restartService 라는 action값을 보내게 되고 해당 값을 수신 받으면 서비스가 재시작됨을 알 수 있고 클라이언트는 서비스에게 다시 연결을 시도 합니다.

 

로그를 볼까요?

서비스가 종료되어 연결이 끊어진 후 서비스가 재시작된 후에 클라이언트에게 재시작 intent를 보냄.

이후 클라이언트는 해당 메세지를 수신하고 다시 서비스와의 연결을 시도 한다.

반응형

 

위 방법으로 우선 처리를 하였고. 그전에는 타이머로 와치독 방식으로 할까도 생각 했지만 이게 가장 적절한 방법이 아니었나 싶습니다.

 

혹시 또 좋은 방법이 있으면 댓글 환영합니다

 

감사합니다

728x90
728x90
반응형

차량 뒤에 아이들을 태우면 아무래도 키 때문에 발이 뜨게 되는데, 이게 아이들에게 그렇게 좋은게 아니고 본인들도 불편함이 있어서, 산다 산다 하다가 이제야 샀습니다.

 

반응형

 

두개 구매 하여 19,600원!! 뭐 요즘 물가 생각하면 걍..쏘쏘...ㅎㅎ

순간 저 사이즈로 배송이 와서 ㅎㅎ 

 

포장을 뜯으니 이렇게 깔끔하게 담겨져 있어요. 두개를 주문 했으니 두개가 각각 이렇게 되어 있네요.

 

 

내용물은 이렇게 압축되어 있어요. 여기에 이제 바람을 불어줘야하는데.

포장을 뜯으니 냄새가 나서 입으로 불기에는 좀... 그래서 평소에 풍선 불때 사용하는 도구를 이용 하였습니다.

 

포장을 뜯으면 이렇게 커요.. 그래서 꾸깃꾸깃....조금 실망?? ㅎㅎ

728x90


열심히 펌프질 후 완성!! 2단계로 하기 위해서 한쪽만 불었어요!!. 저렇게 꾸깃하지만...그래도 뭐....ㅠㅠ

 

 

완성 후 이렇게 차에 배치 하였습니다!! 

2단계가 가장 적당한거 같네요. 차량은 카니발이에요

 

지금은 잘 쓰고 있는데, 장거리에만 쓸가 생각중입니다. 은근히 걸리적?? 일 때가 있어서.. 

 

필요하신 분들은 잘 참고 하시면 될 것 같습니다!

참고로 그래도 만족스럽게 사용은 하고 있어요. 아이들이 편하다고 하네요 ㅎㅎ

 

728x90
728x90
반응형

안드로이드 스튜디오로 개발 중 git 또는 다른 경로를 통해서 새로운 프로젝트를 받았을 때 위와 같은 에러가 발생되는 경우가 있다.
The project is using an incompatible version (AGP 8.6.1) of the Android Gradle plugin. Latest supported version is AGP 8.5.2

 

이 때 굳이 변경 하지말고 나는 내 환경에서 쓰고 싶은데? 이럴때는 일단 build.gradle을 변경하자

 

"사용자 환경에 따라서 다르니 참고만 할 것!"

 

1. build.gradle open

변경 전
plugins {
    id 'com.android.application' version '8.6.1' apply false
    id 'com.android.library' version '8.6.1' apply false
}


변경 후
plugins {
    id 'com.android.application' version '8.5.2' apply false
    id 'com.android.library' version '8.5.2' apply false
}

그 다음 다시 sync를 하면 정상적으로 동작 된다.

728x90
728x90
반응형

반응형

 

추석연휴가 끝나갈때 쯤 아이들을 데리고 펜션을 가고 싶어서 급하게 검색 후 이전에 갔었던 키즈 펜션을 예약 했어요.

가장 가성비가 좋다고 생각하여서 예약을 진행 하였고, 오랜만에 방문 하였습니다.

 

비록 풀장이 굉장히 작지만 아이들이 놀기에는 나쁘지 않다고 생각 했어요.

 

추석 마지막날에 출발 하였고 오후 3시 조금 넘어서 도착을 하였습니다.

출발전 펜션에서 미리 연락을 주어서 추가 인원수와 도착 예정 시간을 물어봤습니다.

아마도 에어컨과 온수등을 맞출려고 한거 같네요.

 

도착전에 관리실을 먼저 들러서 추가 요금 및 숙소 비밀번호를 수령하였습니다.

추가금으로는 인원1 + 미온수 = 7만원이 추가 되었습니다. ( 계좌이체 및 카드 결제 가능 )

 

 

따로 숯불 할 수 있도록 테라스에 구비 되어 있는데요, 숯불을 할 경우 그냥 사서 와서 하면되요. 따로 얘기할 필요 없어 보이더라구요, 

저희는 그냥 이런것도 다 귀찮아서 하진 않았습니다.

 

 

진짜..뷰는 좋더라구요.. 너무좋았어요!!

 

실내는 ...이렇습니다.

아이들이 놀 수 있는 공간이고 사진쪽에 보이는 계단이 풀장으로 가는곳이에요.

 

딱 8살정도까지 놀면 될 거 같은?? 풀장빼고는 아이들이 놀공간이 그렇게 크진 않았어요.

 

잠을 자는 공간은 방이 하나 있었고 패밀리침대로 되어 있어요.

아이들 배게, 어른 배게로 나누어져 있는데요, 문제는 어른배게.... 너무 높아요.  개인적으로 배게..가지고 가세요.. 너무 높아요...

 

 

잠자는방에 있는 에어컨인데.. 상태가 영.. 그래서 저희는 틀지 않았습니다.

그냥 거실 에어컨 빵빵하게 해놓고 선풍기로 바람 보내도록 했어요. 그렇게 해도 괜찮더라구요.

 

 

화장실은 깔끔한 편입니다. 뜨거운물도 잘나오고.. 단점은.. 가끔 하수구 냄새가 올라온다는.. 어쩔수가 없네요.

상하수도가 제대로 안되어 있는건지.. 이전에도 그랬는데 이건 나아질 기미가 없습니다..

728x90

주방은 깔끔했어요.. 

참고로 저희는 밥솥이 없어서;;; 원래 없는건가 해서 그냥 밖에서 사먹고 들어왔는데 알고보니 지원되는거였네요..

근데 왜 빠져 있니.. 햇갈리게...

 

그리고 풀장에 튜브가 한개밖에 없어서 아이들 두명인집은 하나 가져가는걸 추천합니다.

전화하니.. 없대요 여분이 ㅡㅡ;;

 

정말 정말 풀장을 못찍었네요;;;

사이즈는 대략 3미터*2미터정도 입니다.

깊이는 어른 무릎정도에요.

 

결론. 가성비로 가는곳이고,

그 이상을 원한다면 추천하진 않습니다.

하지만 가성비를 따진다면 추천합니다.

 

그리고 배달음식 가능한대, 원하는 곳은 배달비가 6500~8000원 사이여서.. 그냥 현리 시내 나가서 사먹고 왔습니다.

개인적으로 나가서 사먹는거 좋았어요!!

 

그럼 즐거운 여행들 되세요

 

728x90
728x90
반응형

안녕하세요.

우리가 필요에 따라서 특정업체들의 홍보 알람등을 받게 되는데요. 이게 나중에 필요가 없어지면 안받고 싶은데.. 잘 모르는 분들이 꽤 있어서 공유 하려고 합니다.

 

오늘은 카카오톡 메세지 알람을 차단 하는 방법을 알려 드립니다.

 

참고로 저는 지금은 받고 싶지 않은 휴대폰 관련 광고 알림을 차단 하려고 합니다



차단하고 싶은 알림 메세지를 선택 하세요. 

 

 


업체의 프로필 부분을 선택 하세요. 

 


프로필에 들어가면 채널표시 부분을 선택 하세요.

 

 


그러면 채널 차단 이라는 다이얼로그 창이 생성 됩니다.

차단을 선택 해주세요. 

 

 


그러면 아래에 노란색 상자가 생성 되요. 

나중에 필요할 때 다시 알림받기를 선택 하시면 됩니다.   

 


그리고 채팅방을들어가면 역시 알림톡 차단이 되었다는 공지사항이 발생 되어 있습니다.

이렇게 하면 불필요한 알림을 차단 하실 수 있으세요!!  

 

 

끝!

728x90
728x90
반응형

전체화면의 사이즈를 상황에 따라서 동적으로 사이즈를 조절 하기 위한 예제.

 

레이아웃 설정 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Hello World!"
        android:background="#ff0022"
        android:gravity="center"
        android:textColor="@color/cardview_light_background"
        app:layout_constraintBottom_toTopOf="@id/guidelineHorizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@id/guidelineVertical"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/test"
        android:text="클릭"
        app:layout_constraintEnd_toEndOf="parent"
        />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guidelineVertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.2" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guidelineHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.7" />



</androidx.constraintlayout.widget.ConstraintLayout>

 

이렇게 레이아웃만 설정 하면 TextView의 전체 사이즈가 가이드라인을 통해서 조절이 된다.

이런식으로 수평/수직의 퍼센트를 설정함으로 해당 가이드라인을 기준으로 TextView을 그리고 있다.

 

그럼 상황에 따라서 TextView의 사이즈가 조절되야 하는 경우가 있다.

실제 실무에서도 필요한 기능이므로 그럴 때는 코드단에서 처리를 해줘야 한다.

 

아래와 같이 해보자.

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

        var btn: Button = findViewById(R.id.test)
        btn.setOnClickListener {
            changeGuideline(0.5, 0.8)
        }
    }

    private fun changeGuideline(ver:Double, hor:Double) {
        val gd1: Guideline = findViewById(R.id.guidelineHorizontal)
        val gd2: Guideline = findViewById(R.id.guidelineVertical)

        gd1.layoutParams = (gd1.layoutParams as ConstraintLayout.LayoutParams).apply {
            guidePercent = ver.toFloat()
        }

        gd2.layoutParams = (gd2.layoutParams as ConstraintLayout.LayoutParams).apply {
            guidePercent = hor.toFloat()
        }
    }
}

 

동적인 상황을 고려하여 클릭 했을 경우 변경 되도록 처리.

위와 같이 사이즈가 조절 되었음.

 

참조 해서 잘 사용해보자..기록기록.

728x90
728x90
반응형

프로젝트시 특정모듈에 따라서 기능을 on/off해야 하는데 메타데이터에서 컨트롤 하는게 더 효율적으로 생각되어 메타데이터에서 설정후 실제 코드에서 읽어오는 방법을 정리 하였다.

 

매니페스트 설정

<manifest>
......
	<meta-data
        android:name="testEnable"
        android:value="true"
    />
</manifest>

메니패스트에 사용할 메타데이터를 등록한다.

나의 목표는 testEnable이 true이면 특정 기능을 사용하고 없으면 사용하지 않는 것이다.

 

private fun getTestEnable(): Boolean {
	return packageManager.getApplicationInfo(
            packageName,
            PackageManager.GET_META_DATA)
            .metaData
            .getBoolean("testEnable")
}

 

만약에 testEnable 메타데이터가 없는 경우는 무조건 false로 리턴한다.

728x90

+ Recent posts