android 4.0以上系统如何实现自动接听电话

fire_android 2013-01-05 09:36:08
我用网上的代码如下:


synchronized void autoAnswerCall(){

Context context = TApplication.nowApplication;

try

{

//插耳机

Intent localIntent1 = new Intent(Intent.ACTION_HEADSET_PLUG);

localIntent1.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

localIntent1.putExtra("state", 1);

localIntent1.putExtra("microphone", 1);

localIntent1.putExtra("name", "Headset");

context.sendOrderedBroadcast(localIntent1, "android.permission.CALL_PRIVILEGED");


//按下耳机按钮

Intent localIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON);

KeyEvent localKeyEvent1 = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK);

localIntent2.putExtra("android.intent.extra.KEY_EVENT", localKeyEvent1);

context.sendOrderedBroadcast(localIntent2, "android.permission.CALL_PRIVILEGED");


//放开耳机按钮

Intent localIntent3 = new Intent(Intent.ACTION_MEDIA_BUTTON);

KeyEvent localKeyEvent2 = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);

localIntent3.putExtra("android.intent.extra.KEY_EVENT", localKeyEvent2);

context.sendOrderedBroadcast(localIntent3, "android.permission.CALL_PRIVILEGED");


//拔出耳机

Intent localIntent4 = new Intent(Intent.ACTION_HEADSET_PLUG);

localIntent4.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

localIntent4.putExtra("state", 0);

localIntent4.putExtra("microphone", 1);

localIntent4.putExtra("name", "Headset");

context.sendOrderedBroadcast(localIntent4, "android.permission.CALL_PRIVILEGED");

}catch (Exception e){

e.printStackTrace();

}

}

实现了在模拟机和真机的android2.3系统上的自动接听功能,在模拟机上android4.0系统的也可以,但是在真机android4.0上就不行了(三星19300 4.1系统 和 小米 4.0系统 都不行),
求高手指教如何在真机4.0上实现自动接听功能呀??????(用aidl反射是不行的)
...全文
9455 67 打赏 收藏 转发到动态 举报
写回复
用AI写文章
67 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeadong_flash 2014-09-23
  • 打赏
  • 举报
回复
mTelephonyManager 楼主请问是什么
jeadong_flash 2014-09-22
  • 打赏
  • 举报
回复
被这问题困扰着。
不忘i初心 2014-08-22
  • 打赏
  • 举报
回复
楼主也屌诶。一年了都不忘记自己开的贴
不忘i初心 2014-08-22
  • 打赏
  • 举报
回复
楼主2013年一月开的贴。你们现在还在问。。诶。。。苦了楼主了
逍遥过客 2014-08-12
  • 打赏
  • 举报
回复
#55楼的4行代码,测试如下机型自动接听OK: (1)小米2S(4.1.1) (2)华为G6(4.2.2)
echoJiang 2014-06-23
  • 打赏
  • 举报
回复
考虑到不同手机sdk极可能都是定制过的,反射的方式会适用性更强一些吧
qq_16590027 2014-06-16
  • 打赏
  • 举报
回复
楼主,麻烦问下自动接听电话必须要借助耳机么?可不可以不借助耳机,当有电话进来时直接接听,急用,求帮助,谢谢
tyhdark123 2014-04-18
  • 打赏
  • 举报
回复
那请问自动挂断怎么来处理,我想也是通过模拟耳机按键长按事件。但是在keyevent里面没有action是长按的。用keyevent不同的构造函数写出来的,也只能是按钮几秒钟被up 或则down几次。
迪12345 2014-03-21
  • 打赏
  • 举报
回复
楼主 我还是不太明白 能给发一份源码么?843469524@qq.com 谢谢啦~~~~
mi19931025 2014-02-24
  • 打赏
  • 举报
回复
为什么我vivo x1st上测试没效果,有什么解决办法吗
khls27 2014-01-18
  • 打赏
  • 举报
回复
求大牛啊!!
khls27 2014-01-18
  • 打赏
  • 举报
回复
[quote=引用 55 楼 liubaoxinggo 的回复:] 直接使用这个就可以了,测试在三星s4 android4.2上也可以。 但是有的手机上会自动挂断,求高手解决!!! 在note2 719 上,几乎每次都会自动挂断,博主有新的解决办法没?
fire_android 2013-12-04
  • 打赏
  • 举报
回复
直接使用这个就可以了,测试在三星s4 android4.2上也可以。 但是有的手机上会自动挂断,求高手解决!!!

/**
	 * 自动接听电话
	 */
	private void autoAnswercall(){
		 Intent meidaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);  
				KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);  
				meidaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT,keyEvent);  
				TApplication.nowApplication.sendOrderedBroadcast(meidaButtonIntent, null);
	}
fire_android 2013-12-04
  • 打赏
  • 举报
回复
引用 52 楼 hinuliba 的回复:
TApplication.nowApplication是什么意思啊
这是一个Context对象,你换成其他的就可以了
hinuliba 2013-12-02
  • 打赏
  • 举报
回复
引用 35 楼 liubaoxinggo 的回复:
[quote=引用 32 楼 majaw 的回复:] [quote=引用 23 楼 liubaoxinggo 的回复:] 问题解决了,谢谢大家的帮助关心
LZ不厚道啊,问题解决了也不说下咋解决的[/quote] 这是不好意思哦,这段时间一直在忙,忙的晕头转向的,忘记贴出来了 代码如下:
/**
	 * 该方法可以用于4.1的接听
	 */
	public void autoAnswerPhone() { 
		try {
			ITelephony itelephony = getITelephony(mTelephonyManager);
			//itelephony.silenceRinger(); 
			itelephony.answerRingingCall(); 
		} catch (Exception e) {
			e.printStackTrace();
			try {
				Intent intent = new Intent("android.intent.action.MEDIA_BUTTON");
				KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK);
				intent.putExtra("android.intent.extra.KEY_EVENT",keyEvent);
				TApplication.nowApplication.sendOrderedBroadcast(intent,"android.permission.CALL_PRIVILEGED");
				
				intent = new Intent("android.intent.action.MEDIA_BUTTON");
				keyEvent = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);
				intent.putExtra("android.intent.extra.KEY_EVENT",keyEvent);
				TApplication.nowApplication.sendOrderedBroadcast(intent,"android.permission.CALL_PRIVILEGED");
				
				Intent localIntent1 = new Intent(Intent.ACTION_HEADSET_PLUG);
				localIntent1.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				localIntent1.putExtra("state", 1);
				localIntent1.putExtra("microphone", 1);
				localIntent1.putExtra("name", "Headset");
				TApplication.nowApplication.sendOrderedBroadcast(localIntent1,"android.permission.CALL_PRIVILEGED");
				
				Intent localIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON);
				KeyEvent localKeyEvent1 = new KeyEvent(KeyEvent.ACTION_DOWN,
						KeyEvent.KEYCODE_HEADSETHOOK);
				localIntent2.putExtra("android.intent.extra.KEY_EVENT",	localKeyEvent1);
				TApplication.nowApplication.sendOrderedBroadcast(localIntent2,"android.permission.CALL_PRIVILEGED");
				
				Intent localIntent3 = new Intent(Intent.ACTION_MEDIA_BUTTON);
				KeyEvent localKeyEvent2 = new KeyEvent(KeyEvent.ACTION_UP,
						KeyEvent.KEYCODE_HEADSETHOOK);
				localIntent3.putExtra("android.intent.extra.KEY_EVENT",	localKeyEvent2);
				TApplication.nowApplication.sendOrderedBroadcast(localIntent3,"android.permission.CALL_PRIVILEGED");
				
				Intent localIntent4 = new Intent(Intent.ACTION_HEADSET_PLUG);
				localIntent4.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				localIntent4.putExtra("state", 0);
				localIntent4.putExtra("microphone", 1);
				localIntent4.putExtra("name", "Headset");
				TApplication.nowApplication.sendOrderedBroadcast(localIntent4,"android.permission.CALL_PRIVILEGED");
			} catch (Exception e2) {
				e2.printStackTrace();
				Intent meidaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);  
				KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);  
				meidaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT,keyEvent);  
				TApplication.nowApplication.sendOrderedBroadcast(meidaButtonIntent, null);
				}
			}
		}
[/quote] TApplication.nowApplication是什么啊
hinuliba 2013-12-02
  • 打赏
  • 举报
回复
TApplication.nowApplication是什么意思啊
dizzer 2013-09-20
  • 打赏
  • 举报
回复
有没有大神能告诉我 getITelephony 这个函数是干嘛的
dizzer 2013-09-19
  • 打赏
  • 举报
回复
LZ您好 我是android 小白 请问ITelephony itelephony = getITelephony(mTelephonyManager) 中的mTelephonyManager 是什么参数?然后这个函数的功能是手机接到来电的时候不需划屏就可以直接接电话么?(就是电话一来不需要什么操作 直接就通话了)
wsdaijianjun 2013-08-07
  • 打赏
  • 举报
回复
引用 48 楼 liyanglyw 的回复:
挂掉是因为前面拦截异常造成的 有很多手机上都会出现偶尔接听会挂断的情况 所以可以直接使用 Intent meidaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK); meidaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT,keyEvent); TApplication.nowApplication.sendOrderedBroadcast(meidaButtonIntent, null); 就可以了,前面的不需要。
前面的不需要是指哪里前面不需要?我这也出现了偶尔会挂断的情况
liyanglyw 2013-07-31
  • 打赏
  • 举报
回复
挂掉是因为前面拦截异常造成的 有很多手机上都会出现偶尔接听会挂断的情况 所以可以直接使用 Intent meidaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK); meidaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT,keyEvent); TApplication.nowApplication.sendOrderedBroadcast(meidaButtonIntent, null); 就可以了,前面的不需要。
加载更多回复(46)
系统要求:Android2.1及以上 大家都说-来电通CallMaster号称同行三最:“小体积-速度快-全数据”,常驻内存—显示来电归属地,系统服务技术佳,不会偷偷的在后台运行给机油们省点电,小编认为还是很… 应用简介 三大爆点,来电通给你全新的通讯体验。 爆点一:免费电话,免费短信,让你不再为话费所烦恼。 1、全新免费电话功能想打就打,好友不便时更可灵活转为免费语音留言,让你和好友随时随地轻松沟通,从此再无话费困扰。 2、全新免费短信功能,可与好友便捷语音聊天、分享图片、互刷搞怪表情,更支持多达50人的群聊,让你畅享海侃乐趣的同时免除短信费用负担; 3、智能短信,…... 展开三大爆点,来电通给你全新的通讯体验。 爆点一:免费电话,免费短信,让你不再为话费所烦恼。 1、全新免费电话功能想打就打,好友不便时更可灵活转为免费语音留言,让你和好友随时随地轻松沟通,从此再无话费困扰。 2、全新免费短信功能,可与好友便捷语音聊天、分享图片、互刷搞怪表情,更支持多达50人的群聊,让你畅享海侃乐趣的同时免除短信费用负担; 3、智能短信,让免费短信更加保险。 我们全新的智能短信功能,一如iPhone的iMessage,可根据好友在线状态智能选择使用普通或免费短信发送信息;暂未送达的免费短信更可设置自动或手动转用普通短信重发,确保你的每条消息及时送达。让你的Android手机,也能体验iPhone的独有功能。 爆点二:云拦截,让垃圾短信骚扰电话无处可藏。 1、不断强大的 云拦截 功能,借助云端特征库,可疑号码使用特定的红色头像来标识,从此疑似骚扰或诈骗号码的来电便一目了然,不再上当,来电通全面保护你的通讯安全。 你只需通过更新同步云端防骚扰版本库,就可以避免最新的垃圾电话和骚扰短信哦。 来电通独家对类似+020110的冒警电话进行了骚扰来电提醒。 如果没被拦截的骚扰来电,骚扰短信,也无需烦恼哦,轻轻一个举报,它便不会再骚扰你啦。 爆点三:全新界面UI,绝对让你眼前一亮。 全新的UI,全新的体验,各种有趣的东西等待你来挖掘。 1、全新UI全新体验,黑色简约大气风格,绝对让你眼前一亮 2、底部的功能栏,让友友寻找自己想要的功能,更加的快捷方便; 3、全新引入账号及头像体系。 来电通Android4.0Beta版本,提供了免费短信的功能,每个人都有自己的来电通账号,自然也可以上传漂亮的、个性化的头像咯。 4、工具箱中,有我们来电通原有的各大招牌功能。全新的按钮图标,全新的展示方式,不变的是经典实用的功能。 在骚扰拦截的模块图标上,更有小数字标签提示你拦截到多少骚扰的短信和电话哦。 5、趣味搜索,带给你全新的搜索体验 功能优化,体验更佳 1、信息会话界面,字体大小随心换 信息设置界面新增 信息字体大小 设置项,大字还是小字任你调。 2、拦截记录列表加载性能大幅提升,滑动更流畅; 信息拦截中被拦短信很多?每次进入都感觉很卡?最新版本对加载性能做了大幅提升,不但进入列表飞快,滑动更是非一般流畅哦。

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧