안드로이드 진동, 소리 출력

이영준·2023년 4월 4일
1
post-thumbnail

업로드중..

📌 진동 (Vibrator)

Vibrator 객체를 이용하여 진동을 발생시킨다.

<uses-permission android:name="android.permission.VIBRATE"/>

주요 메서드로
vibrate(android.os.VibrationEffect)

  • Vibration effect 클래스를 이용해 진동 발생
    VibrationEffect.createWaveform()
  • 반복하여 지동을 울릴 때 사용

이 있다.

🔑 Vibrator 생성

val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { // API Level 31에서 VibratorManager로 변경됨
            val vibratorManager = this.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
            vibratorManager.defaultVibrator;
        } else {
            getSystemService(VIBRATOR_SERVICE) as Vibrator
        }

현재 API 레벨에선 Vibrator Manager를 통해 생성한다.

🔑 일회성 진동

// 1. 진동 발생(일회성)
        btn1.setOnClickListener {

            Log.d(TAG, "onCreate: ${vibrator}")
            // deprecated  Build.VERSION_CODES.O
            if(Build.VERSION.SDK_INT >= 26 ) {
                vibrator.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
            }else{
                vibrator.vibrate(500);
            }
        }

vibrator.vibrate(500)와 같이 시간만 주고 진동세기를 지정하지 않는 것은 현재 deprecated 되었다.

🔑 진동 취소

btn4.setOnClickListener {
            vibrator.cancel()
        }

🔑 패턴 진동

패턴 진동은 VibrationEffect를 써서 구현한다.

// 2. 패턴 진동 발생(일회성)
        btn2.setOnClickListener {
            val vibratorTiming = longArrayOf(100, 400, 100, 100, 100, 100)//대기 진동 대기 진동 대기 진동
            val effect = VibrationEffect.createWaveform(vibratorTiming, -1)//-1은 반복이 없음을 의미
            vibrator.vibrate(effect)
        }

        // 3. 패턴 진동 반복
        btn3.setOnClickListener {
            val vibratorTiming = longArrayOf(100, 400, 100, 100, 100, 100)
            val effect = VibrationEffect.createWaveform(vibratorTiming, 2)
            vibrator.vibrate(effect)
        }

0은 무한반복
-1은 한번만
양수는 해당 인덱스부터 끝까지를 계속 반복한다
ex) 100 200 300 200 100 이고 repeat를 1을 주면 100 200 300 200 100 200 300 200 100 ..... 와 같이 반복한다

🔑 진동 세기 조절

진동세기도 패턴마다 조절할 수 있다. VibratorEffect에 인자로 전달하면 된다.

 // 5. 패턴 진동 세기 조절 (일회성)
        btn5.setOnClickListener {
            val vibratorTiming = longArrayOf(100, 400, 100, 100, 100, 100)
            val vibratorAmplitudes = intArrayOf(0, 50, 0, 200, 0, 200)
            val effect = VibrationEffect.createWaveform(vibratorTiming, vibratorAmplitudes, -1)
            vibrator.vibrate(effect)
        }

📌 소리 (Ringtone)

Ringtone클래스를 이용해 원하는 음악파일(wav, mp3)등을 res 폴더의 raw 폴더에 넣고 실행할 수 있다.

        // 6.Ringtone
        btn6.setOnClickListener {
            if (btn6.text == "Ringtone_start") {
                ringtone.play()
                btn6.setText("Ringtone_stop")
            } else {
                ringtone.stop()
                btn6.setText("Ringtone_start")
            }
        }

        val uriRingtone2 = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
        //val uriRingtone2 = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
        val ringtone2 = RingtoneManager.getRingtone(this, uriRingtone2)

        // 7.default_bellsound_start
        btn7.setOnClickListener {
            if (btn7.text == "default_bellsound_start") {
                ringtone2.play()
                btn7.setText("default_bellsound_stop")
            } else {
                ringtone2.stop()
                btn7.setText("default_bellsound_start")
            }
        }
profile
컴퓨터와 교육 그사이 어딘가

2개의 댓글

comment-user-thumbnail
2023년 4월 4일

유익해요

1개의 답글