这个范例主要说明,只要输入电话,系统自动帮助过滤电话,在这里,转换铃声模式使用setRingerMode做设置,正常模式为:RINGER_MODE_NORMAL,
而静音为RINGER_MODE_SILENT,震动模式为RINGER_MODE_VIBRATE.
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView mTextView01;
private TextView mTextView03;
private EditText mEditText1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置PhoneCallListener
mPhoneCallListener phoneListener=new mPhoneCallListener();
//设置TelephonyManager去抓取Telephony Service,获取相应的系统服务
TelephonyManager telMgr=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//注册监听,设置监听的State
telMgr.listen(phoneListener, mPhoneCallListener.LISTEN_CALL_STATE);
mTextView01=(TextView)findViewById(R.id.tv1);
mTextView03=(TextView)findViewById(R.id.tv2);
mEditText1=(EditText)findViewById(R.id.et1);
}
/****
*判断PhoneStateListener现在的状态,继承PhoneStateListener类,我们可以重新其内部的
*的各种监听方法,然后通过手机状态改变时,系统自动触发这些方法来实现我们想要的功能
*/
public class mPhoneCallListener extends PhoneStateListener{
public void onCallStateChanged(int state,String incomingNumber){
switch(state){
//取得手机是待机状态
case TelephonyManager.CALL_STATE_IDLE:
mTextView01.setText(R.string.str_CALL_STATE_IDLE);
try{
AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
if(audioManager!=null){
//设置手机为待机时,响铃模式为正常
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.getStreamVolume(AudioManager.STREAM_RING);
}
}catch(Exception e){
mTextView01.setText(e.toString());
e.printStackTrace();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //取得手机状态为通话中
mTextView01.setText(R.string.str_CALL_STATE_OFFHOOK);
break;
//取得手机状态为来电
case TelephonyManager.CALL_STATE_RINGING: //电话响铃状态
//显示来电的信息
mTextView01.setText(getResources().getText(R.string.str_CALL_STATE_RINGING)+incomingNumber);
//判断与输入电话是否为一样,当一样时响铃模式为静音
if(incomingNumber.equals(mTextView03.getText().toString())){
try{
AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
if(audioManager!=null){
//设置响铃模式为静音
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.getStreamVolume(AudioManager.STREAM_RING);
Toast.makeText(MainActivity.this, getString(R.string.str_msg), Toast.LENGTH_SHORT).show();
}
}catch(Exception e){
mTextView01.setText(e.toString());
e.printStackTrace();
break;
}
}
break;
}
super.onCallStateChanged(state,incomingNumber);
mEditText1.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
//设置在EditText里所输入的数据同步显示在TextView
mTextView03.setText(mEditText1.getText());
return false;
}
});
}
}