2011-05-10 57 views
25

我想知道我是否在打電話。如何知道我是否在通話中使用Android?

如果我正在打電話,然後開始服務(服務部分是明確的)。我該怎麼做呢?

在參加電話會議時,我需要撥打服務......我不知道如何執行此操作?任何幫助?

+4

你的意思是在「電話」,「方法呼叫」或其他呼叫? (交接呼叫?窗簾呼叫?Lauren Bacall?:-)) – 2011-05-10 11:02:58

+0

是它的電話... – Rockin 2011-05-10 11:05:02

回答

53

你需要廣播接收機...

在艙單申報廣播接收器...

<receiver android:name=".PhoneStateBroadcastReceiver"> 
     <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE"/>  
     </intent-filter> 
</receiver> 

還宣佈用途的許可......

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

廣播接收器類。 ..

package x.y; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

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

    } 

} 

還有一類定製手機狀態聽衆......

package x.y; 
import android.content.Context; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class CustomPhoneStateListener extends PhoneStateListener { 

    //private static final String TAG = "PhoneStateChanged"; 
    Context context; //Context to make Toast if required 
    public CustomPhoneStateListener(Context context) { 
     super(); 
     this.context = context; 
    } 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     super.onCallStateChanged(state, incomingNumber); 

     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      //when Idle i.e no call 
      Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show(); 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      //when Off hook i.e in call 
      //Make intent and start your service here 
      Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show(); 
      break; 
     case TelephonyManager.CALL_STATE_RINGING: 
      //when Ringing 
      Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      break; 
     } 
    } 
} 
+2

讓我檢查並將其標記爲answer..anywayz謝謝 – Rockin 2011-05-10 11:34:04

+0

iam找不到UDF – Rockin 2011-05-10 11:52:55

+0

安裝此應用程序和手機時出現一個問題一個調用...在調試模式控制不來onReceive – Rockin 2011-05-10 14:51:04

26

TelephonyManager.getCallState()返回一個如果這符合您的要求,它比吹笛的代碼少得多的多綜合解決方案。

+1

我認爲這是一個更好的解決方案。 在第一種情況下,每個電話狀態改變都會添加一個新的監聽器。 – Goo 2013-11-15 16:47:05

+0

+1我不知道該方法存在。但是,如果我們想要知道特定時間的通話狀態,但這種方法只會有所幫助,但它無助於監控通話狀態。 – 2014-10-07 08:55:09

+4

((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE))。getCallState()for newbie – 2016-02-02 18:44:09

相關問題