我正在構建呼叫轉移應用程序,並使用** 21 * xxxxxx#ussd代碼使用ACTION_CALL Intent激活呼叫前轉。但我還沒有找到解決方案來檢查呼叫轉移是否處於活動狀態。Android檢查是否啓用呼叫轉移
有沒有解決方案來檢查從android系統,如果呼叫轉移是活躍或不活動?
我正在構建呼叫轉移應用程序,並使用** 21 * xxxxxx#ussd代碼使用ACTION_CALL Intent激活呼叫前轉。但我還沒有找到解決方案來檢查呼叫轉移是否處於活動狀態。Android檢查是否啓用呼叫轉移
有沒有解決方案來檢查從android系統,如果呼叫轉移是活躍或不活動?
可以使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);
}
}
}
注意: 以下的答案是建議。我沒有親自嘗試過,所以你最好試試看結果。
從你的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來做到這一點。但here在這個答案中提出了一些可以嘗試的方法。
最好的運氣
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 2016-09-05 11:04:01
是的,您可以使用*#21#以與您使用** 21 * xxxxxx#激活CF相同的方式檢查CF. 順便說一下,這些是MMI代碼,而不是USSD代碼。
可以[此鏈接](http://developer.android.com/reference/android/telephony/PhoneStateListener.html)是一個解決方案嗎? – 2013-03-22 01:37:27