Android 实现背景音乐的播放及震动
实现音乐应用
播放背景音乐
基础
Android支持一般音乐格式,如mid格式,mp3格式。
将要引用的音频文件放入文件夹“res/raw”
在Eclipse中,”raw”文件夹默认在”res”文件夹下。在Android编译器下,需要自己添加。
需要import “Android.media.MediaPlayer”
实现细节:
声明MediaPlayer变量
MediaPlayer MediaPlayer;

实例化该对象,并且用已添加至资源文件夹的音乐文件来初始化该对象。
mediaPlayer = MediaPlayer.create(this, R.raw.xxx);

播放音乐
if(!mediaPlayer.isPlaying())mediaPlayer.start();

暂停播放
if(mediaPlayer.isPlaying())mediaPlayer.pause();

停止播放
if(mediaPlayer.isPlaying())mediaPlayer.stop();

音效
基础

支持普通的音乐格式,如“mid格式”、“MP3格式”和“ogg格式”,但是利用SoundPool来实现播放必须保证该音乐文件的大小不超过1MB。
需要将音频问价能放置在’res/raw’中。
需要import “android.media.SoundPool”。
tips:SoundPool适用于短促且对反应速度比较高的情况(游戏音效或者按键声。)
实现细节:
声明SoundPool变量:
SoundPool soundPool;
声明”HashMap
手机震动
使安卓手机震动能够给用户提供一个触觉上的反馈与交互,可以保证更佳的用户体验并且使得用户直接感知到安卓应用的反馈。(无法在安卓模拟器上调试。)

基础
要实现震动功能必须在Manifest.xml中添加permission。

<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”…“>
<uses-permission
android:name=”android.permission.VIBRATE”/>
<application android:label=”…”> … </application>
</manifest>

震动时长(自定义)
实例化 Vibrator对象:
Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

震动时长设置(300毫秒)
v.vibrate(300);
自定义震动模式
实例化
Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
– 举例:
利用自定义的模式使得手机以摩斯密码的模式向使用者传递“SOS”讯息。在莫斯密码中s = “…”,o = “—”,其中有在“.”和“-”的停顿,包括字母和单词之间的停顿时长也不相同。

以下的为不同的停顿长度:

int dot = 200; // 莫斯密码点的震动时长
int dash = 500; // 莫斯密码横的震动时长
int short_gap = 200; // 点与横之间的时长间隔
int medium_gap = 500; // 字母之间的时间间隔
int long_gap = 1000; // 单词之间的时间间隔

模式定义(SOS):

long[] pattern = {0, // 立刻开始
dot, short_gap, dot, short_gap, dot, // s
medium_gap,
dash, short_gap, dash, short_gap, dash, // o
medium_gap,
dot, short_gap, dot, short_gap, dot, // s
long_gap
};

实现震动:

v.vibrate(pattern, -1); //-1表示不重复震动

用户自定义停止震动
实例化Vibrator

Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

立即开始震动,震动200毫秒,停止500毫秒

long[] pattern = { 0, 200, 500 };
v.vibrate(pattern, 0);

tips:
0表示的是重复该震动模式,从pattern数组下标0开始。若输入1,实现的震动模式会变成震动500毫秒暂停200毫秒。

取消震动,可由用户对应用发出的某指令来成为取消震动的条件。由开发者自定义:

v.cancel();

下面的链接是实现以上功能的Demo,以供参考。

Demo链接

%title插图%num