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

浏览:1162 ℃
字体:
发布时间:2013-12-09 23:23:33
来源:

今天给大家介绍的是怎么样使用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;
}

}

闁硅翰鍎遍幃鏇犫偓娑崇細缁″嫰宕濋悩韫俺濞e浄鎷�/QQ 1602007闁挎稑鑻崣褍鈻旈妸锝傚亾婵犱胶顐介柡鍌滎攰娴犲牓鎯勯悢铏圭Ч闁靛棗顑呮禍鏇熺┍閳ュ啿褰嗗ù鍏碱殔瑜帮拷
>更多相关文章
24小时热门资讯
24小时回复排行
閻庢侗姣孴 闁归潧褰炵粭銏ゅ棘绾懍绮撻柣鈺嬫嫹
闁告梻鍋熼幃濠冨濮橆剚鍠� 閻庢冻闄勬俊褔寮甸姘厒濞戞挻绮嶉弻鐔兼嚂閺冨倹绀�
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2025 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();