android call and audio
-
-
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
ConnCtl *:s
- android audio (http://blog.csdn.net/myspor/article/details/6278788)
- android Phone 距离感应器锁的实现(http://blog.csdn.net/nadiee/article/details/17219903)
- android -- 蓝牙 bluetooth (五)接电话与听音乐(http://blog.csdn.net/baimy1985/article/details/9275559)
-
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); private void setSpeakerphoneOn(boolean on) { if(on) { audioManager.setSpeakerphoneOn(true); } else { audioManager.setSpeakerphoneOn(false);//关闭扬声器 audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL); setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); //把声音设定成Earpiece(听筒)出来,设定为正在通话中 audioManager.setMode(AudioManager.MODE_IN_CALL); } }
-
- 如果有 android 源代码,直接编译出 framework.jar。把这个jar包加到你的项目classpath里,然后那些hidden, internal 的类和方法都可以直接用了。
- try {
- Toast.makeText(getApplicationContext(), "dddd", 1).show();
- ITelephony it = PhoneUtil.getITelephony(tlmar);
- it.silenceRinger();
- // it.endCall();//拒接
- it.answerRingingCall();//自动接听
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
1、电话拦截
这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏方法来实现。
- //利用反射获取隐藏的endcall方法
- TelephonyManager telephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- try {
- Method getITelephonyMethod = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[]) null);
- getITelephonyMethod.setAccessible(true);
- iTelephony = (ITelephony) getITelephonyMethod.invoke(telephonyMgr, (Object[]) null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //挂断电话
- iTelephony.endCall();
2、拦截后提示忙音/空号/已关机/已停机
这个功能其实是要用到MMI指令,具体如何设置呼叫转移的指定可以参考这里 http://baike.baidu.com/view/206402.html?fromTaglist。
在本文中我们会用到“遇忙转移”的功能。中国移动的设置方式是 **67#电话号码#,取消方式为 ##67#。”无条件转移“用21代替67即可。这两个指令可以直接在手机的拨号界面输入并拨号测试。ITelephony的endcall方法挂断电话后,会提示电话忙。如果事前设置好了忙时转移到一个空号/已关机/已停机的电话号码,就会提示您拨的电话号码是空号/已关机/已停机。
其实大家可以下载 xxx卫士看下,它设置来电拒接模式后,都是会启动设置MMI指令的界面。然后再去“设置->通话设置->来电转接”,看看 “占线时转接” 设置好的电话号码,就可以知道空号/已关机/已停机对应的电话号码是什么了。
- Message message = mHandler.obtainMessage();
- message.what = OP_REGISTER;
- mHandler.dispatchMessage(message);
- mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- //先静音处理
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
- //再恢复正常铃声
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- private Handler mHandler = new Handler() {
- public void handleMessage(Message response) {
- int what = response.what;
- switch(what) {
- case OP_REGISTER:{
- Intent i = new Intent(Intent.ACTION_CALL);
- i.setData(Uri.parse(ENABLE_SERVICE));
- startActivity(i);
- break;
- }
- case OP_CANCEL:{
- Intent i = new Intent(Intent.ACTION_CALL);
- i.setData(Uri.parse(DISABLE_SERVICE));
- startActivity(i);
- break;
- }
- }
- }
- };