πŸ’š 개발/μ•ˆλ“œλ‘œμ΄λ“œ

[μ•ˆλ“œλ‘œμ΄λ“œ] Android 진동/mp3파일 λ„£κΈ°

devshin.kr 2022. 5. 16. 11:42
728x90
ν•΄λ‹Ή 글은 2018λ…„ 12μ›” 8일에 μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ 진동과 μ‚¬μš΄λ“œκ°€ μšΈλ¦¬λŠ” μ•ˆλ“œλ‘œμ΄λ“œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€μ–΄ 보겠닀.

xml ν˜•μ‹μ€ μ‰½κ²Œ RelativeLayout 으둜 λ§Œλ“€μž.

1. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ²„νŠΌ λ§Œλ“€κΈ°

res > layout > activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="진동"/>

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="μ†Œλ¦¬" 
        android:layout_toRightOf="@+id/btn1"/>

</RelativeLayout>

 

 

activity_main.xml을 μœ„ μ½”λ“œλŒ€λ‘œ λ§Œλ“€λ©΄ μœ„μ™€ 같은 창이 λ§Œλ“€μ–΄ 진닀.

​

 

 

2. Manifest file에 진동 permission을 κΌ­! μΆ”κ°€ν•œλ‹€.

μŒμ•…μ„ μœ„ν•œ permission은 ν•„μš” μ—†λ‹€.

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

κΆŒν•œμ€ <application></application> λ°–μ—μ„œ! λ„£μ–΄ μ€€λ‹€. (μ•„λž˜ manifest file μ°Έκ³ )

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


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

    
    <application
        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/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

 

 

​

3. MainActivity.java

package shin.kr.myapplication;

import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    MediaPlayer mp = MediaPlayer.create(this, R.raw.twinkle);


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

        Button vib = findViewById(R.id.btn1);
        Button sound = findViewById(R.id.btn2);

        vib.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                vibrator.vibrate(1000);
            }
        });

        sound.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mp.start();
            }
        });

    }
}

 

 

​

4. MediaPlayer에 λ“€μ–΄ 갈 mp3νŒŒμΌμ„ λ„£κΈ° μœ„ν•΄ res폴더 μ•ˆμ— raw폴더λ₯Ό μƒμ„±ν•œλ‹€. 그리고 κ·Έ μ•ˆμ— mp3νŒŒμΌμ„ λ„£λŠ”λ‹€.

 

 

 

μΆ”κ°€ μ„€λͺ… :

- 진동 : vibrator.vibrate(1000); 의 의미. μ—¬κΈ°μ—μ„œμ˜ λ‹¨μœ„λŠ” milliseconds둜 1000ms = 1s. 즉 1초λ₯Ό μ˜λ―Έν•œλ‹€. 1초 λ™μ•ˆ 진동이 울리게 λ§Œλ“œλŠ” 역할을 ν•œλ‹€. μ‘μš©ν•˜λ©΄ 0.5μ΄ˆλŠ” 500으둜, 2μ΄ˆλŠ” 2000으둜 값을 λ°”κΏ” μ£Όλ©΄ λœλ‹€.

- μ‚¬μš΄λ“œ : if (mp.isPlaying()) mp.stop(); 와 같은 κΈ°λŠ₯을 μΆ”κ°€μ μœΌλ‘œ λ„£μœΌλ©΄ λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ μŒμ•…μ΄ μž¬μƒλ˜κ³ , λ‹€μ‹œ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μŒμ•…μ΄ μ •μ§€λ˜λŠ” κΈ°λŠ₯을 λ§Œλ“€ 수 μžˆλ‹€.