ํด๋น ๊ธ์ 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>
โ
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(); ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฃ์ผ๋ฉด ๋ฒํผ์ ๋๋ ์ ๋ ์์ ์ด ์ฌ์๋๊ณ , ๋ค์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์์ ์ด ์ ์ง๋๋ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์๋ค.
'๐ ๊ฐ๋ฐ > ์๋๋ก์ด๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ์ฑ ์๋ช (3) | 2022.12.09 |
---|---|
[Android] APK ์ AAB ์ ์ฐจ์ด์ (0) | 2022.12.09 |
[Android] Error while waiting for device: The emulator process for AVD Pixel_4_API_30 has terminated. (0) | 2022.03.03 |
[Android] INSTALL_PARSE_FAILED_MANIFEST_MALFORMED in Android12 (2) | 2022.02.09 |
[์๋๋ก์ด๋] ๋ฐํ์์ ๊ถํ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ (2) | 2022.01.05 |
๋๊ธ