본문 바로가기
Android/Chapter

[Android] 앱 만들기 Chapter2. 로그인 화면

by hyun's life_developer 2020. 9. 2.

안녕하세요 초보개발자 시아아빠입니다.

 

이번 포스팅에서는 앱 만들기 Chapter1에 이어 인트로 -> 로그인 화면 이어지는 앱을 만들어 보겠습니다.

 

지금까지 잘 따라오셨다면 IntroActivity는 아래와 같으실겁니다.

 

 

onCreate를 해주고 activity_intro를 set해주었습니다.

 

따라서 현재 앱을 실행시키면 해당 activtiy_intro.xml의 화면이 나올 것입니다.

 

여기서 로그인 화면으로 이어지도록 만들어봅시다.

 

 

package com.example.intro;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.app.ActivityOptions;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

public class IntroActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intro);

        //statusBar 색상 지정하기
        View view = getWindow().getDecorView();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            if(view != null)
            {
                view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                //statusBar
                getWindow().setStatusBarColor(Color.parseColor("#FFFFFF"));

                //navigationBar
                getWindow().setNavigationBarColor(Color.parseColor("#FFFFFF"));
            }
        }

        if (!hasPermissions())
            requestPermissions();
        else
            init(true);
    }

    private void init(boolean delay)
    {
        if(delay)
        {
            long DELAY_MILLIS = 1500L;
            new Handler().postDelayed(new Runnable()
            {
                @Override
                public void run()
                {
                    startLoginActivity();
                }
            }, DELAY_MILLIS);
        }
        else
        {
            startLoginActivity();
        }
    }

    private void startLoginActivity() {
        finish();
        ActivityOptions options = ActivityOptions.makeCustomAnimation(this, R.anim.fade_in, R.anim.fade_out);
        Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
        // 앱 새로 실행 | 모든 Activity 삭제
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    }

    public static final int REQ_PERMISSION_ALL = 1000;

    //@formatter:off
    private String[] permissions =
            {
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };
    //@formatter:on
    private boolean hasPermissions()
    {
        //if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
        //    return true;

        for (String permission : permissions)
        {
            if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }

        return true;
    }

    private void requestPermissions()
    {
        ActivityCompat.requestPermissions(this, permissions, REQ_PERMISSION_ALL);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

 

---> 설명 ( 주석으로 설명을 대체할까 하였지만 코드만 보시는 분들 위해 설명 따로 하겠습니다 )

 

저는 좀 더 깔끔한 인트로 화면을 위해 onCreate에  상태바와 네비게이션바의 색상을 통일시켰습니다.

 

그 이후에 if절에서 hasPermissions를 체크하는데요. 쉽게말해 권한이 있는지 없는지 체크합니다.

 

권한이 없다면 requestPermissions 메소드를 실행하고 권한이 있다면 startLoginActivity 메소드를 실행합니다.

 

requestPermissions는 권한을 요청하는 부분, startLoginActivity는 로그인화면을 시작하는 부분이 되겠습니다.

 

startLoginActivity에서 ActivityOptions을 사용하여 애니메이션 효과를 줍니다. 해당 애니메이션을 위한 xml 파일은 아래부분에서 확인하실 수 있습니다.

 

그 다음 Intent에 class파일을 넣습니다. 안드로이드에서 화면을 넘기기위해서는 항상 intent에 담습니다.

 

 

 

---포스팅 중 ---

댓글