我正在构建一个呼叫转移应用程序,并已使用 **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);
}
}
如果 cfi 返回 true 表示设置呼叫转发成功
注意事项: 以下答案是建议。我没有亲自尝试过,所以您最好尝试一下以检查结果。
从您的 gsm 号码中,您可以通过拨打 *#21# 检查您的呼叫转移选项。因此,您可以尝试从应用程序中拨打此号码并阅读 ussd 响应。
第 1 部分:拨打号码
Intent intentCallForward = new Intent(Intent.ACTION_CALL);
Uri uri = Uri.fromParts("tel", "*#21#", "#");
intentCallForward.setData(uri);
startActivity(intentCallForward);
第 2 部分:阅读 ussd 响应
没有 API 可以做到这一点。但是在this SO answer中,它建议了一些您可以尝试的方法。
祝你好运
你可以让 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);
}
}
}
是的,您可以使用 *#21# 以与使用 **21*xxxxxx# 激活 CF 相同的方式检查 CF。顺便说一句,这些是 MMI 代码,而不是 USSD 代码。