2012-11-15 12 views
6

I tring per impostare PhoneStateListener ma ottengo un "PhoneCallListener non può essere risolto in un tipo".Aggiungi 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); 


} 

In un altro esempio, ho trovato il suo scritto come questo e che sta funzionando

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

Cosa devo cambiare nel mio codice per farlo funzionare? Grazie per l'aiuto

+0

http://stackoverflow.com/questions/ 5345470/onclicklistener-can not-be-resolved-to-a-type-eclipse – Omarj

risposta

15

È necessario creare un ricevitore per catturare le chiamate telefoniche.

A tale scopo, aggiungere questo nel vostro in 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> 

e creare queste classi:

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

Solo una correzione in onDestroy(). Non si deve passare nulla: telephony.listen (phoneListener, PhoneStateListener.LISTEN_NONE); phoneListener dovrebbe essere un membro. – Pin

+0

Ciao. Non riesco a ottenere e registrare il numero in arrivo dai parametri. Perché? – halilkaya

+6

Non hai OnDestroy nel ricevitore. http://developer.android.com/reference/android/content/BroadcastReceiver.html –