2012-11-15 2 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-can-be-a-type-eclipse – Omarj

답변

15

전화를 걸려면 수신기를 만들어야합니다. 이러한 클래스를

<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> 

만들 :

것은 이렇게하려면 manifest.xml에서이 추가

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

수신자에 OnDestroy가 없습니다. http://developer.android.com/reference/android/content/BroadcastReceiver.html –