Mobile/Android
[Android] 채팅 어플 만들기
[Android] 채팅 어플 만들기
2022.01.02소켓 통신을 이용한 채팅 어플을 만들어보자. 더보기 import android.database.sqlite.SQLiteDatabase; import android.icu.util.Output; import android.os.Handler; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import andro..
[Android] 네트워킹 2
[Android] 네트워킹 2
2021.12.13지난 시간에는 소켓을 사용한 네트워킹에 대해 배웠다. 이번에는 JSON 데이터를 다뤄 활용해보자. JSON : JavaScript Object Notation 클라이언트와 서버가 좀 더 가볍게 데이터를 주고받기 위해 도입됐다. 소켓 통신에서는 byte stream 혹은 char stream으로 데이터를 주고받았는데, 이게 가능한 이유는 통신하는 대상끼리 서로 약속이 되어 있기 때문이다. 이렇게 진행되면 데이터 수는 줄일 수는 있지만 문제가 발생한다. 요즘은 기술의 발전으로 인해 텍스트 기반으로 통신을 진행하는게 가능해졌다. 여기서 xml과 JSON 형식의 데이터가 주목받고 있고, 데이터를 더 가볍게 주고받을 수 있는 JSON 형식의 데이터가 많이 쓰이고 있다. 프로그래밍 언어에 상관없이 넓게 사용할 수 ..
[Android] 네트워킹 1
[Android] 네트워킹 1
2021.12.05네트워크를 이용해 서버에 데이터를 요청하고 응답받아 다른 사용자와도 소통해보자. 클라이언트는 서버에 데이터를 요청하고 서버는 그 요청에 대해 응답하는 형식의 2-tier 모델이 있다. 이 경우에 서버가 직접 데이터베이스를 다루고 만약 데이터베이스를 다루는 방식에 변화가 있으면 클라이언트에도 문제가 생긴다. 이 문제를 해결하기 위해 3-tier 모델이 도입됐다. 클라이언트와 서버가 소통하는 점에서는 2-tier 모델과 같지만, 서버를 응용 서버와 데이터 서버로 분리해 데이터를 관리하는 서버를 따로 구성하는 부분에서 차이가 있다. 이 외에도 서버를 두지 않고 단말끼리 서버와 클라이언트 역할을 하는 P2P모델도 있는데, 자세한 내용은 데이터베이스를 공부할 때 다루기로 하고 지금은 이 정도만 공부하자. 소켓을 ..
[Android] 내용 제공자 (Content Provider)
[Android] 내용 제공자 (Content Provider)
2021.11.29한 앱에 대해서 데이터베이스를 만들고 만든 데이터베이스를 다른 앱에서 사용할 수는 없을까? 이 때 내용 제공자를 통해서 데이터베이스에 접근할 수 있다. (앱의 보안과 연관됨) 내용 제공자를 사용하기 위해서 새로 내용 제공자를 만들 수도 있지만, 이미 만들어져있는 내용 제공자를 사용해 정보를 가져오는 부분에 집중해서 공부하자. 안드로이드 앱의 구성요소로 액티비티 / 서비스 / 방송 수신자 / 내용 제공자가 있는데 마지막 부분인 내용 제공자에 대해 알아보자. 내용 제공자도 앱의 구성요소 중 하나이기 때문에 시스템에서 관리한다. 여기서 내용 (Content)에는 전화번호, 이미지, 텍스트 등등.. 여러가지가 될 수 있다. 내용 제공자를 사용할 때는 Resolver 객체를 사용한다. 우리가 얻으려는 데이터는 네..
[Android] 모바일 데이터베이스
[Android] 모바일 데이터베이스
2021.11.21지금까지 만든 앱들은 앱의 작동이 종료될 시 데이터가 다 사라졌었다. 하지만, 전화번호부 앱을 만든다고 생각할 때 앱을 종료시켰을 때 데이터가 모두 사라지면 앱의 의미가 없다. 앱을 종료하더라도 종료 전까지의 데이터는 저장되어야 하고, 이 때 데이터베이스가 사용된다. 안드로이드에서는 SQLite라는 모바일 데이터베이스가 내장되어있고, SQLite를 통해 많은 양의 데이터를 효과적이고 체계적으로 관리할 수 있다. 데이터베이스는 테이블 형태로 저장된다. 학생 데이터를 저장한다고 생각하면, 이름 전화번호 학번 학과 등의 데이터가 테이블 형태로 저장된다. 데이터베이스를 만드는 방법으로는 Context 클래스의 openOrCreateDatabase 메서드를 사용하는 방법이 있다. 데이터베이스를 다루는 메서드들이다..
[Android] 음악 재생 플레이어 만들기
[Android] 음악 재생 플레이어 만들기
2021.11.21몇 가지 기능이 있는 음악 재생 플레이어를 만들어보자. 소스코드 더보기 package kr.ac.cnu.computer.seekbar; import android.media.MediaPlayer; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity {..
[Android] 리스트 보여주기
[Android] 리스트 보여주기
2021.11.21여러 개의 리스트를 보여주기 위해서 어떻게 해야 할까? 이 때 리스트 뷰와 리사이클러 뷰를 사용할 수 있다. (요즘은 리사이클러 뷰를 더 많이 사용하는 추세임) 리스트 뷰는 수평으로만 리스트를 보여줄 수 있지만, 리사이클러 뷰는 수평과 수직 방향 모두 사용할 수 있다. 잠시 핸드폰에서 설정 버튼을 누르고 화면 소리 등 여러가지 설정을 한다고 생각해보자. 리스트들이 수평 방향으로 보여지는데, 보여주는것에서 끝나지 않고 리스트들 중 하나를 선택해 세부 설정으로 접근해야 한다. 이 때 쓰이는 게 선택 위젯이다. 리스트를 보여주는 것과 리스트의 정보를 관리하는 건 서로 차이가 있다. 보여주는 동작은 위젯이 처리하고 정보 관리는 어댑터 클래스가 처리한다. 즉, 여러 개의 리스트 중에서 하나를 선택하는 방식의 선택..
[Android] 쓰레드와 핸들러
[Android] 쓰레드와 핸들러
2021.11.12메인액티비티는 화면을 가지고, 이벤트가 발생했을 때 처리해 주는 역할을 수행한다. 메인액티비티에는 메인 쓰레드가 만들어져 있고, 이벤트가 발생해 이벤트 큐에 저장된 이벤트들을 메인쓰레드가 하나씩 실행시킨다. (메인액티비티에는 하나의 프로세스가 있고, 프로세스 안에 쓰레드가 있다.) 메인 이벤트가 한 가지 일을 처리하고 있을 때, 그 일처리가 끝나기 전에는 다른 동작을 할 수 없다. 예를 들면, 버튼을 눌렀을 때 용량이 큰 파일 하나를 다운받는 프로그램을 만들었다고 하자. 이 때 파일의 다운로드가 끝나기 전까지 화면의 어떤 버튼을 눌러도 화면이 바뀌지 않고 멈춘 상태를 유지한다. 이 때 쓰레드를 하나 더 만들어 위 상황을 해결할 수 있다. 메인 쓰레드가 하는 일을 별도로 쓰레드를 만들고 그 쓰레드에게 지정..
[Android] 서비스와 브로드캐스트 수신자
[Android] 서비스와 브로드캐스트 수신자
2021.11.06안드로이드 앱을 구성하는 네 가지 요소 중 액티비티에 대해서는 지금까지 살펴봤고, 이제 서비스와 브로드캐스트에 대해 알아보자. 액티비티와 달리 서비스와 브로드캐스트는 화면을 담당하지 않는다. 문자메세지가 도착했을 때 내가 만든 앱에서 수신하게 하고 싶을 때 브로드캐스트를 사용한다. 서비스 서비스는 액티비티와 달리 화면이 없는 상황에서 백그라운드에서 실행되고, 프로세스가 종료돼도 시스템에서 자동으로 재시작한다. 매니페스트 파일에서 태그를 사용해 선언한다. (개발 도구로 생성 시 보통 자동으로 추가됨) onCreate() : 서비스가 만들어 질 때 해야 할 일을 이쪽에 정의한다. onStartCommand() : 서비스가 호출될 때 마다 해야 할 일을 정의한다. onDestroy : 서비스가 종료될 때 해야..
[Android] 인텐트와 프로그레스바 사용하기
[Android] 인텐트와 프로그레스바 사용하기
2021.10.28프로그레스 바를 사용해 보고 인텐트를 통해 화면 전환 동작을 수행하는 앱을 만들어 보자. 소스코드 더보기 // MainActivity package kprogressbar; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.w3c.dom.Text; public class Ma..
[Android] 여러 화면 간 전환
[Android] 여러 화면 간 전환
2021.10.25처음 안드로이드 프로젝트를 생성하면, XML파일(activity_main.xml)과 자바 소스 파일(MainActivity.java)이 생성된다. 자바 소스코드의 R.layout.activity_main 코드는 이 두 파일을 연결해준다. (R은 res폴더를, layout은 res폴더 안의 layout폴더를 의미함) 인플레이션은 XML 레이아웃에 정의된 내용(디자인도구를 이용해 만든 버튼, 텍스트뷰 등..)이 메모리에 객체화 되는 과정을 말한다. (버튼의 상태를 정의) 자바 코드에 정의하고, 실제로 객체가 되려면 메모리에 기억장소를 할당받아야 한다. 그 역할을 인플레이션이라고 한다. MainActivity 코드에서 setContentView가 인플레이션 과정을 수행한다. 위의 코드에서 setContentV..
[Android] 대화상자 사용하기
[Android] 대화상자 사용하기
2021.10.18대화 상자는 사용자에게 메세지를 출력하고 사용자로부터 입력을 받아들이는 사용자 인터페이스이다. 대화 상자는 Dialog클래스를 상속받는다. 여러 가지 종류의 대화 상자가 있으니 상황에 맞게 잘 찾아쓰자. 해당하는 클래스의 객체를 만들고 메서드들을 이용해서 원하는 기능을 구현하는 큰 틀은 똑같다. (사실 이렇게 무슨 기능이 있는지 배워나가는 것보다, 만들고 싶은 프로젝트가 있으면 그 프로젝트를 진행하면서 필요한 건 강의나 책을 찾아서 배우는 방법이 훨씬 나은 방법인것 같다.) 그래도 배운건 정리해야하니까.. 계속 정리해 보면 프로그레스 바를 만들 때 setIndeterminant() 메서드에서 false를 매개변수로 받을시 언제 끝날 지 예상이 가능함을 의미하고 true를 매개변수로 받을 시 언제 끝날 지..