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反射是不行的)
...全文
9488 67 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)

80,472

社区成员

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

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