android 通话结束广播,如何以编程方式回答/结束Android 4.1中的通话...

我正在写一个Android应用程序,我需要接听来电,做一些工作,然后结束通话.

在所有谷歌搜索之后,我可以找到两种不同的方法来实现这一点,这两种方法都不适用于Android的最新版本,特别是在4.1,Jelly Bean之后.

I.)使用广播接收器中的Java Reflection为“android.intent.action.PHONE_STATE”访问“com.android.internal.telephony.ITelephony”.下面的示例代码可以在数百个相关帖子中找到:

public class PhoneCallReceiver extends BroadcastReceiver {

Context context = null;

private static final String TAG = "Phone call";

private ITelephony telephonyService;

@Override

public void onReceive(Context context, Intent intent) {

if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))

return;

Log.v(TAG, "Receving....");

TelephonyManager telephony = (TelephonyManager)

context.getSystemService(Context.TELEPHONY_SERVICE);

try {

Log.v(TAG, "Get getTeleService...");

Class c = Class.forName(telephony.getClass().getName());

Method m = c.getDeclaredMethod("getITelephony");

m.setAccessible(true);

telephonyService = (ITelephony) m.invoke(telephony);

telephonyService.silenceRinger();

Log.v(TAG, "Answering Call now...");

telephonyService.answerRingingCall();

Log.v(TAG, "Call answered...");

//telephonyService.endCall();

} catch (Exception e) {

e.printStackTrace();

Log.e(TAG,

"FATAL ERROR: could not connect to telephony subsystem");

Log.e(TAG, "Exception object: " + e);

}

}

}

这段代码的问题在于

此方法需要工作,并且此权限已被定义为android v 2.3中的“仅适用于系统应用程序”.简而言之,普通用户应用程序无法再在清单文件中定义此权限.

II.)另一种方法是模拟推动Headset钩子,这使Android接听电话.这是通过广播“Intent.ACTION_MEDIA_BUTTON”来完成的,如下面的代码所示.

public class PhoneCallReceiver extends BroadcastReceiver {

Context context = null;

private static final String TAG = "Phone call";

@Override

public void onReceive(Context context, Intent intent) {

if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))

return;

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

if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

Intent answer = new Intent(Intent.ACTION_MEDIA_BUTTON);

answer.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));

context.sendOrderedBroadcast(answer, null);

Log.d(TAG, "Answered incoming call from: " + number);

}

return;

}

}

此方法适用于Android 4.1,之后android限制用户应用程序广播“Intent.ACTION_MEDIA_BUTTON”.

所以我的结论是,目前我们无法在Android 4.1或更高版本中实现这一目标.

有没有其他人找到这个问题的任何其他解决方案或解决方法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值