Android检查是否已激活呼叫转移

时间:2013-03-21 05:13:30

标签: android

我正在构建一个呼叫转发应用程序,并使用了* 21 * xxxxxx#ussd代码来激活使用ACTION_CALL Intent的呼叫转移。但我还没有找到解决方案来检查呼叫转移是否有效。

如果呼叫转移是否有效,是否有从android系统检查的解决方案?

4 个答案:

答案 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代码。