黑名单来电自动静音(PhoneStateListener与AudioManager)

来源:互联网 发布:淘宝客的pid哪里看 编辑:程序博客网 时间:2024/05/16 10:12

这个范例主要说明,只要输入电话,系统自动帮助过滤电话,在这里,转换铃声模式使用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;
}

});
}




}

/*****最后需要在manifest.xml中注册。* * 注释:AudioManager类提供访问控制音量和响铃模式的操作。*也可以稍作修改,改为振动模式(RINGER_MODE_VIBRATE).*audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE)*修改权限为: ***/
0 0