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

4

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

从Android系统中有没有解决方案可以检查呼叫转移是否已经激活?


这个链接(http://developer.android.com/reference/android/telephony/PhoneStateListener.html)可以作为一个解决方案吗? - Varun Agarwal
4个回答

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,则表示设置呼叫转移成功。

只有在所有呼叫(无条件)都启用转发时,此方法才有效。是否有一种方法可以在忙碌时监听是否存在转发? - Jordy

2

注意事项: 以下答案仅供参考,我个人没有尝试过,因此您最好自己尝试以检查结果。

您可以通过拨打*#21#来检查您的呼叫转移选项。因此,您可以尝试从应用程序拨打此号码并阅读ussd响应。

第一部分:拨打号码

Intent intentCallForward = new Intent(Intent.ACTION_CALL);                               
Uri uri = Uri.fromParts("tel", "*#21#", "#"); 
intentCallForward.setData(uri);                                
startActivity(intentCallForward);

第二部分:阅读USSD响应

目前没有相应的API可供使用。但是在这里,有人提出了一些你可以尝试的方法。

祝好运!


2
您可以让Broadcast类进行注册,这样您就可以跟踪外拨电话,例如:
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);
        }

    }
}

0

是的,您可以使用*#21#来检查与您使用**21*xxxxxx#激活呼叫转移相同的呼叫转移设置。顺便说一下,这些是MMI代码,而不是USSD代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接