2016-12-15 38 views
0

我正在從Android Studio發起通話。代碼如下: 我想在任何時候獲得通話狀態。鏈接:https://developer.android.com/reference/android/telecom/Call.html 顯示調用狀態可以通過使用Class調用獲得。如果我使用Call.getState(),我應該能夠獲得當前狀態。但是我收到編譯錯誤: 錯誤:(28,20)錯誤:Call()在調用中不公開;不能從外部包訪問。在枚舉中定義了幾種呼叫狀態:撥號,振鈴,連接,DI連接,保持等。 當我運行代碼時,它確實進行了呼叫,因爲我可以看到模擬器撥打電話的屏幕。如何獲取即將離任的Android通話的通話狀態

開發者指南沒有提供使用這些類的任何示例。 謝謝你的幫助。

package com.example.ramesh.makeacall; 

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.telecom.Call; 
import android.telephony.*; 

import android.util.Log; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Call call; 
     call = new Call(); 
     call(); 

    } 
    private void call() { 

     try { 

      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:5555551212")); 
      System.out.println("====before startActivity===="); 
      startActivity(callIntent); 


     } catch (ActivityNotFoundException e) { 
      Log.e("helloAndroid","Call failed",e); 
     } 
    } 

    } 

回答

0

嘗試使用這樣的(還沒有嘗試過,雖然) -

Call.Callback callback = new Call.Callback() { 
    @Override 
    public void onStateChanged(Call call, int state) { 
     super.onStateChanged(call, state); 
     if(state == Call.STATE_RINGING){ 
      //you code goes here 
     } 
    } 
}; 
+0

謝謝..它的工作原理 –

0
public class MyPhoneStateListener extends PhoneStateListener { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      case TelephonyManager.CALL_STATE_RINGING: 
       handleRinging(incomingNumber); 
       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       handleOffHook(); 
       break; 
      case TelephonyManager.CALL_STATE_IDLE: 
       handleIdle(); 
       break; 
     } 
     super.onCallStateChanged(state, incomingNumber); 
    } 
} 

和寄存器statelistener:

telephonyManager =(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(myPhoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);

+0

感謝。上面的代碼只給出3個呼叫狀態。我正在嘗試按照以下定義使用類Call:https://developer.android.com/reference/android/telecom/Call.html。這給出了幾個狀態,如CALL_ACTIVE,CALL_DISCONNECTED,CALL_HOLD等。我怎樣才能使用Call()類? –

+0

好的。根據我的理解,因爲Call Class不是按照android文檔公開的,所以不能使用Call類。有沒有辦法繞過它,這樣除了上面提到的3之外,我可以獲得通話的當前狀態? –