2012-11-15 17 views
6

我試圖設置PhoneStateListener,但我收到「PhoneCallListener無法解析爲某種類型」。添加PhoneStateListener

public class ButtonView extends FrameLayout { 


    PhoneCallListener phoneListener = new PhoneCallListener(); 
    TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
    telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); 


} 

在另一個例子中,我發現它這樣寫的,它的工作

public class MainActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 

     // add PhoneStateListener 
     PhoneCallListener phoneListener = new PhoneCallListener(); 
     TelephonyManager telephonyManager = (TelephonyManager) this 
      .getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); 
} 

,使其工作在我的代碼,我應該怎麼改? 感謝您的幫助

+0

http://stackoverflow.com/questions/ 5345470/onclicklistener-無法解析到一個類型的蝕 – Omarj

回答

15

您必須創建一個接收器才能接聽電話。

要做到這一點,在你的manifest.xml中添加此:

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

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

和創建這些類:

import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.webkit.WebView; 

public class MyPhoneStateListener extends PhoneStateListener { 

    public static Boolean phoneRinging = false; 

    public void onCallStateChanged(int state, String incomingNumber) { 

     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      Log.d("DEBUG", "IDLE"); 
      phoneRinging = false; 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      Log.d("DEBUG", "OFFHOOK"); 
      phoneRinging = false; 
      break; 
     case TelephonyManager.CALL_STATE_RINGING: 
      Log.d("DEBUG", "RINGING"); 
      phoneRinging = true; 

      break; 
     } 
    } 

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

public class ServiceReceiver extends BroadcastReceiver { 
    TelephonyManager telephony; 

    public void onReceive(Context context, Intent intent) { 
     MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
     telephony = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 

    public void onDestroy() { 
     telephony.listen(null, PhoneStateListener.LISTEN_NONE); 
    } 

} 
+1

只需要在onDestroy()中更正。您不應該傳遞null:telephony.listen(phoneListener,PhoneStateListener.LISTEN_NONE); phoneListener應成爲會員。 – Pin

+0

嗨。我無法從參數中獲取並記錄incomingNumber。爲什麼? – halilkaya

+6

Receiver中沒有OnDestroy。 http://developer.android.com/reference/android/content/BroadcastReceiver.html –

相關問題