2011-09-08 17 views
5

En mi aplicación, mantendré una lista de contactos.Cómo rechazar una llamada programáticamente en android

Se eliminarán todas las llamadas de los contactos en la lista. Aparecerán bajo llamadas perdidas pero el teléfono no sonará.

+0

ContentObserver es la palabra en su lata mejores prácticas –

+0

posible duplicado de [Cómo bloquear llamadas en android] (http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android) –

+0

'MODIFY_PHONE_STATE' [el permiso es solo para aplicaciones de sistema] (http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread) (para Android 2.3 y superior). Si desea usar la aplicación solo para el teléfono al que tiene acceso, puede [hacer que su aplicación de sistema de aplicación] (http://projectmaxs.org/documentation/systemapp.html) – tchelidze

Respuesta

15

En primer lugar crear esta interfaz:

public interface ITelephony { 

     boolean endCall(); 

     void answerRingingCall(); 

     void silenceRinger(); 

    } 

luego crear esta clase que se extiende BroadcastReceiver

public class IncomingCallReceiver extends BroadcastReceiver { 
    private ITelephony telephonyService; 
    private String blacklistednumber = "+458664455"; 

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

     TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     try { 
     Class c = Class.forName(tm.getClass().getName()); 
     Method m = c.getDeclaredMethod("getITelephony"); 
     m.setAccessible(true); 
     ITelephony telephonyService = (ITelephony) m.invoke(tm); 
     Bundle bundle = intent.getExtras(); 
     String phoneNumber = bundle.getString("incoming_number"); 
     Log.e("INCOMING", phoneNumber); 
     if ((phoneNumber != null) && phoneNumber.equals(blacklistednumber)) { 
      telephonyService.silenceRinger(); 
      telephonyService.endCall(); 
      Log.e("HANG UP", phoneNumber); 
     } 

     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
} 

Esto sólo bloqueará esa única del número de teléfono, pero usted consigue el punto.

En el complemento manifiesta lo siguiente:

<receiver android:name=".IncomingCallReceiver"> 
    <intent-filter android:priority="999"> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" /> 
+0

hola lo hice. Pero nada sucedió. Cómo crear esa interfaz, me refiero a la interfaz normal o archivo de ayuda. – harish

+0

solo crea un intercafe normal. Pero es posible que deba colocarlo en un paquete llamado: com.android.internal.telephony intente eso. –

+0

incluso si no está funcionando, creo que tenemos que generar un archivo de ayuda. Pero no sé cómo hacer eso. – harish

2

Descargar la clase de ITelephony de here.

luego ponerlo en un paquete (crea un nuevo paquete) de com.android.internal.telephony. A continuación, importe el paquete a la clase apropiada y para rechazar una llamada utilice el método endCall()

Cuestiones relacionadas