package android.demo.dialtone; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.media.ToneGenerator; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class DialTone extends Activity implements OnClickListener { /** Called when the activity is first created. */ private final String TAG="DialTone"; 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; private static final HashMap<String,Integer> mToneMap = new HashMap<String,Integer>(); 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 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d(TAG,"onCreate"); 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; } Button button01 = (Button)findViewById(R.id.Button01); Button button02 = (Button)findViewById(R.id.Button02); Button button03 = (Button)findViewById(R.id.Button03); Button button04 = (Button)findViewById(R.id.Button04); Button button05 = (Button)findViewById(R.id.Button05); Button button06 = (Button)findViewById(R.id.Button06); Button button07 = (Button)findViewById(R.id.Button07); Button button08 = (Button)findViewById(R.id.Button08); Button button09 = (Button)findViewById(R.id.Button09); button01.setOnClickListener(this); button02.setOnClickListener(this); button03.setOnClickListener(this); button04.setOnClickListener(this); button05.setOnClickListener(this); button06.setOnClickListener(this); button07.setOnClickListener(this); button08.setOnClickListener(this); button09.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub int id=v.getId(); Integer currentTone=null; //GetCurrent Tone switch(id) { case R.id.Button01: Log.d(TAG,"onClick Button01"); currentTone=mToneMap.get("1"); break; case R.id.Button02: Log.d(TAG,"onClick Button02"); currentTone=(Integer)mToneMap.get("2"); break; case R.id.Button03: Log.d(TAG,"onClick Button03"); currentTone=(Integer)mToneMap.get("3"); break; case R.id.Button04: Log.d(TAG,"onClick Button04"); currentTone=(Integer)mToneMap.get("4"); break; case R.id.Button05: Log.d(TAG,"onClick Button05"); currentTone=(Integer)mToneMap.get("5"); break; case R.id.Button06: Log.d(TAG,"onClick Button06"); currentTone=(Integer)mToneMap.get("6"); break; case R.id.Button07: Log.d(TAG,"onClick Button07"); currentTone=(Integer)mToneMap.get("7"); break; case R.id.Button08: Log.d(TAG,"onClick Button08"); currentTone=(Integer)mToneMap.get("8"); break; case R.id.Button09: Log.d(TAG,"onClick Button09"); currentTone=(Integer)mToneMap.get("9"); break; } if (null != currentTone) { // Log.d(TAG,"currentTone="+currentTone.intValue()); Message msg = mHandler.obtainMessage(PLAY_TONE, currentTone.intValue()); mHandler.sendMessage(msg); // //playTone(currentTone); }else { Log.d(TAG,"!!!!!!"); } } private Handler mHandler= new Handler() { 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 e) { } } }; 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) { return; } mToneGenerator.startTone(tone,DTMF_DURATION_MS); } } } //================================================================= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <TableLayout android:id="@+id/TableLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:text="Digit1" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Digit2" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Digit3" android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </TableRow> <TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:text="Digit4" android:id="@+id/Button04" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Digit5" android:id="@+id/Button05" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Digit6" android:id="@+id/Button06" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </TableRow> <TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:text="Digit7" android:id="@+id/Button07" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Digit8" android:id="@+id/Button08" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Digit9" android:id="@+id/Button09" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </TableRow> </TableLayout> </LinearLayout>