2012-11-15 9 views
6

Tring do skonfigurowania PhoneStateListener, ale otrzymuję komunikat "PhoneCallListener nie można rozwiązać na typ".Dodaj 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); 


} 

W innym przykładzie, znalazłem jego napisane jak to i to działa

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

Co muszę zmienić w moim kodu, aby to działa? Dzięki za pomoc

+0

http://stackoverflow.com/questions/ 5345470/onclicklistener-nie można usunąć-do-typu-zaćmienia – Omarj

Odpowiedz

15

Musisz utworzyć odbiornik, aby przechwytywać połączenia telefoniczne.

Aby to zrobić, należy dodać to w swoim w 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> 

i tworzenie tych klas:

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

Tylko korekta w onDestroy(). Nie należy przekazywać wartości null: telefonia.listen (phoneListener, PhoneStateListener.LISTEN_NONE); phoneListener powinien zostać członkiem. – Pin

+0

Witam. Nie mogę pobrać i zalogować wartość przychodzącą z parametrów. Czemu? – halilkaya

+6

Nie masz OnDestroy w Odbiorniku. http://developer.android.com/reference/android/content/BroadcastReceiver.html –