我正在构建一个呼叫转移应用程序,并使用**21*xxxxxx# ussd代码通过ACTION_CALL Intent激活呼叫转移。但我还没有找到检查呼叫转移是否已激活的解决方案。
从Android系统中有没有解决方案可以检查呼叫转移是否已经激活?
我正在构建一个呼叫转移应用程序,并使用**21*xxxxxx# ussd代码通过ACTION_CALL Intent激活呼叫转移。但我还没有找到检查呼叫转移是否已激活的解决方案。
从Android系统中有没有解决方案可以检查呼叫转移是否已经激活?
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);
}
}
注意事项: 以下答案仅供参考,我个人没有尝试过,因此您最好自己尝试以检查结果。
您可以通过拨打*#21#来检查您的呼叫转移选项。因此,您可以尝试从应用程序拨打此号码并阅读ussd响应。
第一部分:拨打号码
Intent intentCallForward = new Intent(Intent.ACTION_CALL);
Uri uri = Uri.fromParts("tel", "*#21#", "#");
intentCallForward.setData(uri);
startActivity(intentCallForward);
第二部分:阅读USSD响应
目前没有相应的API可供使用。但是在这里,有人提出了一些你可以尝试的方法。
祝好运!
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);
}
}
}
是的,您可以使用*#21#来检查与您使用**21*xxxxxx#激活呼叫转移相同的呼叫转移设置。顺便说一下,这些是MMI代码,而不是USSD代码。