Android学习 - 拨号盘dialer定制声音DTMF Tones
来源:互联网 发布:软件企业认定多久 编辑:程序博客网 时间:2024/05/10 18:56
DTMF:双音多频,电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。双音多频的拨号键盘是4*4的矩阵,每一行代表一个低频,每一列代表一个高频,每按一个键就发送一个高频和低频的正弦信号组合。比如1相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。
现在我就想给自己的拨号键盘加上双音多频的声音,类似于固定电话拨号的声音。页面类似于系统的拨号盘。
public class DialActivity extends Activity implements OnClickListener{ private static String TAG = "【DialApp】"; private static final int PLAY_TONE = 0x01; private static final int DTMF_DURATION_MS = 120; // 声音的播放时间 private Object mToneGeneratorLock = new Object(); // 监视器对象锁 private ToneGenerator mToneGenerator; // 声音产生器 private static boolean mDTMFToneEnabled; // 系统参数“按键操作音”标志位 // 存储DTMF Tones private static final HashMap mToneMap = new HashMap(); static { mToneMap.put('1', ToneGenerator.TONE_DTMF_1); mToneMap.put('2', ToneGenerator.TONE_DTMF_2); mToneMap.put('3', ToneGenerator.TONE_DTMF_3); mToneMap.put('4', ToneGenerator.TONE_DTMF_4); mToneMap.put('5', ToneGenerator.TONE_DTMF_5); mToneMap.put('6', ToneGenerator.TONE_DTMF_6); mToneMap.put('7', ToneGenerator.TONE_DTMF_7); mToneMap.put('8', ToneGenerator.TONE_DTMF_8); mToneMap.put('9', ToneGenerator.TONE_DTMF_9); mToneMap.put('0', ToneGenerator.TONE_DTMF_0); mToneMap.put('#', ToneGenerator.TONE_DTMF_P); mToneMap.put('*', ToneGenerator.TONE_DTMF_S); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //按键声音播放设置及初始化 try { // 获取系统参数“按键操作音”是否开启 mDTMFToneEnabled = Settings.System.getInt(getContentResolver(), Settings.System.DTMF_TONE_WHEN_DIALING, 1) == 1; synchronized (mToneGeneratorLock) { if (mDTMFToneEnabled && mToneGenerator == null) { mToneGenerator = new ToneGenerator( AudioManager.STREAM_DTMF, 80); // 设置声音的大小 setVolumeControlStream(AudioManager.STREAM_DTMF); } } } catch (Exception e) { Log.d(TAG, e.getMessage()); mDTMFToneEnabled = false; mToneGenerator = null; } /* * 拨号按钮注册监听事件 * */ } @Override public void onClick(View view) { int id = view.getId(); //点击按钮的id Integer currentTone; //获得当前的Tone switch(id){ case R.id.digit1: mToneMap.get("1"); break; case R.id.digit2: mToneMap.get("2"); break; . . . } if (null != currentTone) { //第一种方式,采用Handler消息机制进行发声 Message msg = mHandler.obtainMessage(PLAY_TONE, currentTone); mHandler.sendMessage(msg); //第二种方式,直接调用playTone(int tone)方法,不知道二者有何区别?希望大家给点意见。// playTone(currentTone); } } /** * 处理按键响应事件的消息 */ private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { try { switch (msg.what) { case PLAY_TONE: Integer tone_id = (Integer) msg.obj; if (tone_id != null) { playTone(tone_id.intValue()); } break; } } catch (Exception ex) { Log.d(TAG, ex.getMessage()); } } }; /** * 播放按键声音 */ private void playTone(int tone) { if (!mDTMFToneEnabled) { return; } AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int ringerMode = audioManager.getRingerMode(); if (ringerMode == AudioManager.RINGER_MODE_SILENT || ringerMode == AudioManager.RINGER_MODE_VIBRATE) { // 静音或者震动时不发出声音 return; } synchronized (mToneGeneratorLock) { if (mToneGenerator == null) { Log.w(TAG, "playTone: mToneGenerator == null, tone: " + tone); return; } mToneGenerator.startTone(tone, DTMF_DURATION_MS); //发出声音 } }}
0 0
- Android学习 - 拨号盘dialer定制声音DTMF Tones
- Android为拨号盘dialer定制声音DTMF Tones
- Android为拨号盘dialer定制声音DTMF Tones
- Android为拨号盘dialer定制声音DTMF Tones
- Android为拨号盘dialer定制声音DTMF Tones
- Android为拨号盘dialer定制声音DTMF Tones
- Android为拨号盘dialer定制声音DTMF Tones
- linphoned的拨号盘的dialer
- Dialer拨号定制功能
- [RK3288][Android6.0] 调试笔记 --- Audio之分离DTMF tones
- android dtmf
- 通过Dialer拨号盘输暗码启动某个apk
- Android开关机定制(动画,声音)
- RFC4733 RTP Payload for DTMF Digits, Telephony Tones, and Telephony Signals
- Contacts拨号盘源码学习
- Contacts拨号盘源码学习
- android 弹出拨号盘
- Android DTMF识别
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- 安卓高德地图开发(四)——自定义线路规划(根据地点的经纬度规划线路)
- SQL Server 数据库定时自动备份
- FROM_UNIXTIME 格式化MYSQL时间戳函数
- cron表达式详解
- Android学习 - 拨号盘dialer定制声音DTMF Tones
- QML中的模型/视图--在QML中呈现数据
- OpenGL旋转
- 自定义回调 并将之以参数的形式传入
- 数据库 主从一致性检查和修复
- 使用mc-tool实现empathy的自动登录与处理密钥环问题
- [Erlang]比特语法详解,看看你知道多少
- eclipse经常未响应优化
- Python第四节FUNCTIONS学习汇总。