Android4 自动接电话,急求Android5和Android6 接电话的Demo

开发工具:eclipse

MainActivity.java

自动生成后不做操作。

AutoAnswerReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.telephony.TelephonyManager;

public class AutoAnswerReceiver extends BroadcastReceiver {
	
<span style="white-space:pre">	</span>@Override
	public void onReceive(Context context, Intent intent) {

		String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

		if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
			AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
			if (am.getMode() == AudioManager.MODE_IN_CALL) {
				return;
			}
			context.startService(new Intent(context, AutoAnswerIntentService.class));
		}		
	}
}

AutoAnswerIntentService,java

public class AutoAnswerIntentService extends IntentService {

	public AutoAnswerIntentService() {
		super("AutoAnswerIntentService");
	}

	@Override
	protected void onHandleIntent(Intent intent) {
		Context context = getBaseContext();

		 try {
		 Thread.sleep(5000);   //answer the ringing call after 5 seconds
		 } catch (InterruptedException e) {
		
		 }

		TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
		if (tm.getCallState() != TelephonyManager.CALL_STATE_RINGING) {
			return;
		}

		try {
			answerPhoneAidl(context);
		} catch (Exception e) {
			e.printStackTrace();
			Log.d("AutoAnswer", "Error trying to answer using telephony service.  Falling back to headset.");
			answerPhoneHeadsethook(context);
		}
		
		return;
	}

	private void answerPhoneHeadsethook(Context context) {

		Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);
		buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));
		context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED");

		Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
		buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
		context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");
	}

	@SuppressWarnings("unchecked")
	private void answerPhoneAidl(Context context) throws Exception {

		TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		Class c = Class.forName(tm.getClass().getName());
		Method m = c.getDeclaredMethod("getITelephony");
		m.setAccessible(true);
		ITelephony telephonyService;
		telephonyService = (ITelephony) m.invoke(tm);
		telephonyService.answerRingingCall();
	}
}

AndroidManifest.xml

权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
receiver:

<receiver
<span style="white-space:pre">	</span>android:name=".AutoAnswerReceiver"
<span style="white-space:pre">	</span>android:enabled="true" >
<span style="white-space:pre">	</span><intent-filter>
<span style="white-space:pre">		</span><action android:name="android.intent.action.PHONE_STATE" />
<span style="white-space:pre">	</span></intent-filter>
</receiver>

Service

 <service android:name="AutoAnswerIntentService" />


给个下载链接:http://download.csdn.net/detail/kylsen/9674393

这个Demo打开后就能在响铃后5秒自动接电话,目前实测能在Android 4.3和Android 4.4机上实现,但是Android 5以上的都不行,希望有Android 5或Android 6接电话的Demo,能和大家一起分享,我邮箱1191330082@qq.com。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值