Android: Kotlin Splash

    Android: Kotlin Splash

    2020, May 07    

    Splash

    App 을 μ‹€ν–‰ν•˜μ—¬ 처음 λ³΄μ—¬μ£ΌλŠ” 인트둜 ν™”λ©΄, 주둜 데이터λ₯Ό λ‘œλ“œν•˜λŠ” μ‹œκ°„λ™μ•ˆ λ…ΈμΆœν•˜λ©° μ•± 버전, μ—…λ°μ΄νŠΈ μ—¬λΆ€ 등을 μ²΄ν¬ν•˜λŠ” λ™μ•ˆ λ…ΈμΆœν•œλ‹€.

    AndroidManifest.xml

    splashλŠ” μ•± μ‹€ν–‰μ‹œ λ…ΈμΆœλ˜λ―€λ‘œ adroidmanifest 의 LAUNCHERλ₯Ό μ„€μ •ν•΄μ€€λ‹€.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.first.eplatztesttmpl">
        <uses-permission android:name="android.permission.INTERNET" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:debuggable="true"
            android:theme="@style/AppTheme"
            tools:ignore="HardcodedDebugMode">
            <activity android:name=".CalendarViewActivity"></activity>
            <!-- Splash Activity -->
            <activity
                android:name=".SplashActivity"
                android:theme="@style/SplashTheme">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity> <!-- Splash Activity -->
            <activity
                android:name=".MainActivity"
                android:theme="@style/AppTheme.NoActionBar" />
        </application>
    
    </manifest>
    

    SplashActivity.kt

    앱이 μ‹€ν–‰λ˜λ©΄ AndroidManifest μ„€μ •λŒ€λ‘œ μŠ€ν”Œλž˜μ‹œκ°€ μ‹€ν–‰λ˜κ³  μ„€μ •λœ λ”œλ ˆμ΄κ°€ μ†Œμš”λ˜λ©΄ MainActivityκ°€ μ‹€ν–‰λ˜λ„λ‘ ν•œλ‹€. κ·Έ 사이 api 톡신을 ν•˜μ—¬ ν•„μš”ν•œ 데이터 및 버전 체크λ₯Ό μ§„ν–‰ν•œλ‹€.

    class SplashActivity : AppCompatActivity() {
    
        val SPLASH_VIEW_TIME : Long = 3000 // 3μ΄ˆκ°„ μŠ€ν”Œλž˜μ‹œ ν™”λ©΄ λ…ΈμΆœ(ms)
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            /**
             * μ•± μ‹€ν–‰μ‹œ, api 톡신
             */
            var retrofit = Retrofit.Builder()
                .baseUrl("http://192.168.0.101:9090")
                .addConverterFactory(GsonConverterFactory.create())
                .build()
    
            //field λ³€μˆ˜ μž„μ˜μ„€μ •
            val a = "a"
            var splashService = retrofit.create(ApiService::class.java)
    
            splashService.requestApi(a).enqueue(object : Callback<ApiOutPut> {
                override fun onFailure(call: Call<ApiOutPut>, t: Throwable) {
    
                    Log.d("DEBUG", t.message)
                    //μ›Ή 톡신에 μ‹€νŒ¨ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ
    
                    var dialog = AlertDialog.Builder(this@SplashActivity)
                    dialog.setTitle("μ‹€νŒ¨")
                    dialog.setMessage("톡신에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.")
                    dialog.show()
                }
    
                override fun onResponse(call: Call<ApiOutPut>, response: Response<ApiOutPut>) {
                    //μ›Ή 톡신에 성곡 , 응닡값을 λ°›μ•„μ˜¨λ‹€
    
                    var code = response.body() // resultCode, resultMessage, resultData
    
                    var dialog = AlertDialog.Builder(this@SplashActivity)
                    dialog.setTitle("μ•ŒλžŒ")
                    dialog.setMessage("resultCode = "+ code?.resultCode + ", resultMessage = " + code?.resultMessage + ", resultData = " + code?.resultData)
                    dialog.show()
                }
    
            })
    
    
            //setting start activity after delay
            Handler().postDelayed({
                startActivity(Intent(this,MainActivity::class.java))
            },SPLASH_VIEW_TIME)
    
            setContentView(R.layout.activity_main)
        }
    }