Android # 진동과 소리 울리기
안드로이드/Android-Dev

Android # 진동과 소리 울리기

진동과 소리 울리기

진동(Vibrate)

진동은 얼마동안 울리도록 할 것인지 지정할 수 있으며, Vibrator라는 시스템 서비스 객체를 사용한다. Vibrator에는 vibrate라는 이름의 메서ㅓ드가 있어 진동이 울리는 패턴이나 시간을 지정할 수 있다.

vibrate() 메서드의 파라미터로 long자료형의 값이 전달된다. 이 값은 시간을 의미하며 진동을 얼마나 지속시킬 것인지 지정한다.
그런데, 이 long 자료형의 값을 전달하는 vibrate()메서드가 버전에 따라 달라지게 되었다.
다음 포스팅을 참고.
https://philipbox.tistory.com/69

소리

Ringtone 객체의 play() 메서드를 호출하면 소리가 울린다. API에서 제공하는 소리가 아닌, 다른 음원 파일을 재생시킬 수도 있다. 다른 음원 파일을 재생시킬때는 미디어플레이어(MediaPlayer)객체를 이용하면 된다.



xml 화면은 위처럼 간단하게 구성해놓고, java코드를 작성해서 실습해보았다.

[activity.main]

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
58
59
60
61
62
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 = (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();
            }
        });
 
    }//end onCreate
}
 
cs



첫 번째 버튼을 클릭했을 때는 먼저 Vibrator 객체를 참조한다. 이 객체에는 vibrate() 메서드가 정의되어 있는데, 위에 걸어두었던 링크에서 알 수 있다시피 단말의 OS버전에 따라 다르게 적용시켜줘야 한다.
이 메서드에 전달되는 1000, 10 값은 각각 지속시간과 음량을 나타낸다. 만약 26미만이라면 1000 값만 전달한다. 이 값은 지속시간을 나타낸다.


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


세 번째 버튼을 클릭하면, 직접 지정한 음원을 재생하도록 했다. 여기에서는 res>폴더 내에 raw>beep.wav 처럼, 폴더를 만들고 파일을 넣어주었다.


진동을 울리기 위해서는 VIBRATE라는 권한이 필요하다. AndroidManifest.xml 파일을 열고 VIBRATE 권한을 추가해준다.

    <?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"/>
    ... 중략

'안드로이드 > Android-Dev' 카테고리의 다른 글

Android # SharedPreferences  (0) 2019.12.17
Android # Notification  (0) 2019.12.16
Android # baseline(view)  (0) 2019.12.14
Android # gravity 속성들  (0) 2019.12.14
Android # layout_gravity 와 gravity  (0) 2019.12.14