Android 使用ToneGenerator编写按键发声功能

今天给大家介绍的是怎么样使用ToneGenerator编写按键发声功能,这个在我们开发的时候用到的地方很多(例如电话键盘按键),那么我们就来看看吧,下面我们就用一个例子来说说怎么样能实现这个功能。

package com.jeavox.testtonegenerator;

import android.media.AudioManager;
import android.media.ToneGenerator;
import android.os.Bundle;
import android.provider.Settings;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
private Button btn, btn2, btn3;
private int value;

private ToneGenerator mToneGenerator;
private Object mToneGeneratorLock = new Object(); // 监视器对象锁
private boolean mDTMFToneEnabled; // 按键操作音
private static final int TONE_LENGTH_MS = 150; // 延迟时间
private AudioManager mAudioManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn.setText(value + "");
playTone(value);
value++;
if (value > 9) {
value = 0;
}
}
});

btn2 = (Button) findViewById(R.id.button2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playTone(42); // *: 42
}
});

btn3 = (Button) findViewById(R.id.button3);
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playTone(35); // #: 35
}
});

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mDTMFToneEnabled = Settings.System.getInt(getContentResolver(), Settings.System.DTMF_TONE_WHEN_DIALING, 1) == 1;
synchronized (mToneGeneratorLock) {
if (mToneGenerator == null) {
try {
mToneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, 80);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
} catch (Exception e) {
e.printStackTrace();
mToneGenerator = null;
}
}
}
}

// 播放按键声音
void playTone(int tone) {
if (!mDTMFToneEnabled) {
return;
}

int ringerMode = mAudioManager.getRingerMode();
if ((ringerMode == AudioManager.RINGER_MODE_SILENT) || (ringerMode == AudioManager.RINGER_MODE_VIBRATE)) {
// 静音或者震动时不发出按键声音
return;
}

synchronized (mToneGeneratorLock) {
if (mToneGenerator == null) {
return;
}
mToneGenerator.startTone(tone, TONE_LENGTH_MS); // 发声
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值