Home 진동과 소리로 알려주기
Post
Cancel

진동과 소리로 알려주기

진동과 소리로 알려주기

사용자에게 무언가를 알려주는 가장 간단한 방법은 진동과 소리이디. 진동은 얼마 동안 울리도록 지정할 수 있으며 Vibrator라는 시스템 서비스 객체를 사용한다. vibrate라는 이름의 메서드가 있어 진동이 울리는 패턴이나 시간을 지정할 수 있다.

API

1
2
public void vibrate (long millseconds)	// 예전 방식
public void vibrate (Vibration vibe)	// 안드로이드 26버전 이후

vibrate 메서드의 파라미터로 진동을 얼마나 지속시킬 것인지 전달해준다. 안드로이드 버전 26부터 VibrationEffect를 매개 변수로 전달하는 방식으로 바뀌었다.

변경된 내용을 반영하기 위해서는 Build.VERSION.SDK_INT 상수를 이용해 현재 단말의 버전을 체크하는 과정이 필요하다.

소리를 이용해 사용자에게 알리고 싶다면 Ringtone 객체를 사용할 수 있다.

API

1
public void play()

Rington 객체의 play 메서드를 호출하면 소리가 울리게 된다.

만약 API에서 제공하는 소리가 마음에 들지 않는다면 직접 음원 파일을 만들어 재생할 수 있다. 음원 파일을 만들어 재생할 때는 미디어 플레이어 (MediaPlayer) 객체를 사용할 수 있다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package org.techtown.vibrate;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.MediaPlayer;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

                if(Build.VERSION.SDK_INT >= 26){
                    vibrator.vibrate(VibrationEffect.createOneShot(1000,10));
                }else
                    vibrator.vibrate(1000);
            }
        });

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                // 소리를 울리기 위해 Ringtone 객체 참조하기
                Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(), uri);
                ringtone.play();
            }
        });

        Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.beep);
                player.start();
            }
        });
    }
}

첫 번째 버튼을 클릭했을 때 먼저 Vibrator 객체를 참조한다.

이 객체에는 vibrate 메서드가 정의되어 있는데 안드로이드 버전 26부터 파라미터가 변경되었으므로 Build.VERSION.SDK_INT 상수의 값과 현재 단말의 OS 버전 값을 비교하도록 한다.

만약 26 이상이라면 VibratorEffect.createOneShot 메서드를 호출하여 반환된 객체를 매개 변수로 전달한다. 이 메서드에 전달되는 1000, 10 값은 각각 지속시간과 음량을 나타내며 26 미만이라면 진동 지속 시간만 전달한다.

두 번째 버튼을 클릭했을 때는 API에서 제공하는 기본 음원을 재생하도록 한다. Ringtone 객체는 RingtoneManager.getRingtone 메서드를 이용해 참조할 수 있으며 Uri 객체를 전달하면 지정한 음원을 Ringtone 객체를 참조한다.

세 번째 버튼을 클릭했을 때는 직접 지정한 음원을 재생하도록 한다. 여기에서는 raw 폴더안에 들어 있는 beep.wav 파일을 지정했다.

진동을 우리기 위해서는 VIBRATE 권한이 필요하므로 권한을 추가해주자.

AndroidManifet.xml

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  package="org.techtown.vibrate">  
  
 <uses-permission android:name="android.permission.VIBRATE"/>

결과

1

This post is licensed under CC BY 4.0 by the author.

백준 강의실 배정 (11000)

상단 알림으로 알려주기