2013-03-21 43 views
4

我正在構建呼叫轉移應用程序,並使用** 21 * xxxxxx#ussd代碼使用ACTION_CALL Intent激活呼叫前轉。但我還沒有找到解決方案來檢查呼叫轉移是否處於活動狀態。Android檢查是否啓用呼叫轉移

有沒有解決方案來檢查從android系統,如果呼叫轉移是活躍或不活動?

+0

可以[此鏈接](http://developer.android.com/reference/android/telephony/PhoneStateListener.html)是一個解決方案嗎? – 2013-03-22 01:37:27

回答

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); 
     } 

    } 
} 
2

注意: 以下的答案是建議。我沒有親自嘗試過,所以你最好試試看結果。

從你的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在這個答案中提出了一些可以嘗試的方法。

最好的運氣

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,這意味着呼叫轉移設置成功

+0

這僅適用於所有呼叫的轉接(無條件)。有一種方法可以在忙碌時收聽轉發活動嗎? – Jordy 2016-09-05 11:04:01

0

是的,您可以使用*#21#以與您使用** 21 * xxxxxx#激活CF相同的方式檢查CF. 順便說一下,這些是MMI代碼,而不是USSD代碼。