我正在构建一个呼叫转发应用程序,并使用了* 21 * xxxxxx#ussd代码来激活使用ACTION_CALL Intent的呼叫转移。但我还没有找到解决方案来检查呼叫转移是否有效。
如果呼叫转移是否有效,是否有从android系统检查的解决方案?
答案 0 :(得分:6)
TelephonyManager manager = (TelephonyManager)
this.getSystemService(TELEPHONY_SERVICE);
manager.listen(new MyPhoneStateListener(),
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR );
class MyPhoneStateListener extends PhoneStateListener{
@Override
public void onCallForwardingIndicatorChanged(boolean cfi) {
Log.i(TAG,"onCallForwardingIndicatorChanged CFI ="+cfi);
preferences.edit().putBoolean("CALL_FORWARD_ACTIVE", cfi).commit();
super.onCallForwardingIndicatorChanged(cfi);
}
}
如果cfi返回true,则表示设置呼叫前转成功
答案 1 :(得分:2)
<强>注意事项:强> 以下答案是建议。我没有亲自试过,所以你最好试试看结果。
您可以通过拨打*#21#来查看您的通话编号。因此,您可以尝试从应用程序拨打此号码并阅读ussd响应。
第1部分:拨打号码
Intent intentCallForward = new Intent(Intent.ACTION_CALL);
Uri uri = Uri.fromParts("tel", "*#21#", "#");
intentCallForward.setData(uri);
startActivity(intentCallForward);
第2部分:阅读ussd回复
没有API可以做到这一点。但是在这个SO答案中here它提出了一些你可以尝试的方法。
祝你好运
答案 2 :(得分:2)
你可以让Brodcast类注册它,你可以跟踪调用,如
public class CallBroadcastReceiver extends BroadcastReceiver
{
public static String numberToCall;
public void onReceive(Context context, Intent intent) {
Log.d("CallRecorder", "CallBroadcastReceiver::onReceive got Intent: " + intent.toString());
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
numberToCall = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d("CallRecorder", "CallBroadcastReceiver intent has EXTRA_PHONE_NUMBER: " + numberToCall);
}
}
}
答案 3 :(得分:0)
是的,您可以使用*#21#以与使用** 21 * xxxxxx#激活CF相同的方式检查CF. 顺便说一句,这些是MMI代码,而不是USSD代码。