본문 바로가기

안드로이드

진동과 소리로 알려주기

반응형
https://parkho79.tistory.com/122

 

안드로이드에서 진동은 얼마동안 울리도록 할 것인지 지정할 수 있으며, Vibrator라는 시스템 서비스 객체를 사용한다

 

public void vibrate(long milliseconds)
public void vibrate(VibrationEffect vibe)

 

버전 26부터 VibrationEffect를 파라미터로 전달하는 메소드로 변경되었다

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

 

public void play()

 

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

만약 API에서 제공하는 소리가 마음에 들지 않는다면 직접 음원 파일을 만들어 재생할 수도 있다

만들어서 재생할 때는 MediaPlayer 객체를 사용해야 한다

 

 

 

AndroidMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a78_locationmap">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application

        android:usesCleartextTraffic="true"

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.A78_LocationMap">

        <!-- 구글 지도 사용을 위한 API 키 -->
        <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyCNDA6yHdOheyF540ivwP1GF1JG4tDTaik"/>

        <activity android:name=".MainActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

 

 

 

activitiy_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">

    <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="파일로 소리 울리기" />
</LinearLayout>

 

 

 

 

MainActivity

package com.example.a80_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 view) {
//                절전 모드에서는 진동이 되지 않는다
                
//                Vibrator 객체 참조
                Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);

                if (Build.VERSION.SDK_INT >= 26) {
//                    시간과 진동의 세기 전달
                    vibrator.vibrate(VibrationEffect.createOneShot(1000, 500));
                } else {
//                    버전 26 미만은 시간만 전달
                    vibrator.vibrate(1000);
                }
            }
        });

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                API에서 제공하는 기본 음원 재생
//                Ringtone 객체는 RingtoneManager.getRingtone 매소드를 이용해 참조
//                Uri 객체를 전달하면 지정한 음원을 Ringtone 객체를 참조
                Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(), uri);
                ringtone.play();
            }
        });

        Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                직접 지정한 음원 재생
//                raw 폴더 안에 beep.wav 지정
//                재생 파일 이름이 소문자인지 확인
                MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.beep);
                player.start();
            }
        });

    }
}
반응형

'안드로이드' 카테고리의 다른 글

푸시 서비스 사용하기  (0) 2021.11.10
상단 알림으로 알려주기  (0) 2021.11.10
지도에 아이콘 추가, 오버레이  (0) 2021.11.09
현재 위치의 지도 보여주기  (0) 2021.11.08
GPS로 위치 확인  (0) 2021.11.08