본문 바로가기

안드로이드 앱 스쿨 2기/Android

[11주차 - 수] Raw

raw 데이터

  • raw 데이터는 가공되지 않은 원천 데이터를 의미한다. 
  • 사운드나 동영상, 사진 등을 데이터의 용량을 줄이기 위해 압축을 하게 되는데 이러한 가공을 거치지 않은 순수 데이터 들을 raw 데이터라고 부른다.
  • 안드로이드에서는 각종 데이터 파일이나 동영상, 사운드 등의 데이터를 사용할 때 주로 사용한다.

raw 폴더

  • 실행 중 다운받거나 생성된 데이터 파일은 내부 저장소나 외부저장소에 저장해 두었다가 필요할 때 읽어오면 된다.
  • 만약 데이터가 저장된 파일을 애플리케이션 내부에 포함 시키겠다면 raw 폴더에 저장하면 된다.
  • raw 폴더에 저장된 파일은 스트림을 손쉽게 추출할 수 있다.

 

사운드 파일 재생하기

  • raw 폴더에 들어 있는 사운드 파일 재생은 매우 쉽다.

 

동영상 파일 재생하기

  • 동영상 재생을 위해서는 VideoView라는 View를 사용한다.
  • VideoView는 재생할 영상이 있는 파일의 경로를 직접 설정해줘야 한다.

 

raw 폴더 만드는 방법

 

1. activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="텍스트 파일 읽어오기" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="사운드 재생하기" />

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="사운드 중지하기" />

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="영상 재생하기" />

    <Button
        android:id="@+id/button5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="영상 중지하기" />

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

2. MainActivity

 

 

class MainActivity : AppCompatActivity() {
    lateinit var activityMainBinding: ActivityMainBinding

    // 사운드 재생 관리 객체
    var mediaPlayer: MediaPlayer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.run {
            button.setOnClickListener {
                // raw 폴더에 있는 파일과 연결된 스트림을 추출한다.
                val inputStream = resources.openRawResource(R.raw.data)
                val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
                val bufferedReader = BufferedReader(inputStreamReader)

                var str: String? = null
                val stringBuffer = StringBuffer()

                do {
                    str = bufferedReader.readLine()

                    if(str != null){
                        stringBuffer.append("${str}\n")
                    }
                }while(str != null)

                bufferedReader.close()

                textView.text = stringBuffer.toString()

            }

            button2.setOnClickListener{
                if(mediaPlayer == null){
                    // 사운드 재생 관리 객체를 생성한다.
                    mediaPlayer = MediaPlayer.create(this@MainActivity, R.raw.song)
                    // 재생한다.
                    mediaPlayer?.start()
                }
            }

            button3.setOnClickListener {
                if(mediaPlayer != null){
                    // 사운드를 중지시킨다.
                    mediaPlayer?.stop()
                    mediaPlayer = null
                }
            }

            button4.setOnClickListener {
                // ViewView가 재생중이 아니라면
                if(videoView.isPlaying == false){
                    // 영상 파일의 경로를 가져온다.
                    val uri = Uri.parse("android.resource://${packageName}/raw/video")
                    // 영상 주소를 설정한다.
                    videoView.setVideoURI(uri)
                    // 재생한다.
                    videoView.start()
                }
            }

            button5.setOnClickListener {
                // ViewView가 재생 중이라면
                if(videoView.isPlaying == true){
                    // 영상 재생을 중지한다.
                    videoView.stopPlayback()
                }
            }

        }

    }
}

 


 

val inputStream = resources.openRawResource(R.raw.data)
val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
val bufferedReader = BufferedReader(inputStreamReader)

 

  1. val inputStream = resources.openRawResource(R.raw.data)
    • resources.openRawResource() 메서드는 raw 폴더에 있는 파일과 연결된 스트림을 추출합니다.
    • R.raw.data는 raw 폴더에 있는 data 파일을 가리키는 리소스 식별자입니다.
    • 이 코드를 통해 raw 폴더의 data 파일에 접근하는 inputStream을 얻을 수 있습니다.
  2. val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
    • inputStream을 UTF-8 문자 인코딩으로 읽을 수 있는 InputStreamReader로 변환합니다.
  3. val bufferedReader = BufferedReader(inputStreamReader)
    • InputStreamReader를 BufferedReader로 감싸서 한 줄씩 데이터를 읽을 수 있도록 합니다.

 


[결과]

 

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님

'안드로이드 앱 스쿨 2기 > Android' 카테고리의 다른 글

[11주차 - 수] SQLIteDataBase  (0) 2023.07.06
[11주차 - 수] Assets  (0) 2023.07.05
[11주차 - 화] FileStream  (0) 2023.07.04
[11주차 - 화] Application Class  (0) 2023.07.04
[11주차 - 월] CodeView  (0) 2023.07.03