2011-08-06 2 views
0

Je voudrais créer une application que je peux être en mesure de définir différents numéros de téléphone dans un bloc ou autoriser la liste. Est-il possible de bloquer ou d'autoriser seulement certains numéros de téléphone et si oui, comment pourrais-je faire cela. Merci d'avance, Jonathan.Bloquer les appels téléphoniques entrants et sortants?

+0

contentObserver vous aidera à –

+0

Recieve une émission d'appels et d'utiliser la téléphonie ISDL pour terminer l'appel. La téléphonie isdl contient la méthode d'appel de fin qui vous aidera à mettre fin aux appels. pour un numéro particulier, vous devez vérifier le numéro avec le gestionnaire de téléphonie –

Répondre

0

Il semble que vous deviez créer un service avec un PhoneStateListener enregistré qui vous permet d'écouter les événements concernant le changement d'état du téléphone. Donc, si quelqu'un vous appelle, vous pouvez attraper cet événement dans votre auditeur et réagir en conséquence. Votre propre PhoneStateListener pourrait ressembler à ceci:

public class CustomPhoneStateListener extends PhoneStateListener { 

public void onCallStateChanged(int state, String incomingNumber) { 

    switch (state) { 
    case TelephonyManager.CALL_STATE_IDLE:    
     doSomething(); 
     break; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
     doSomething(); 
     break; 
    case TelephonyManager.CALL_STATE_RINGING: 
     if(incomingNumber.equels(blockedNumber)) { 
      blockNumber(); 
     } 
     break; 
    } 
} 

}

Dans le cas où l'état de téléphone est égale à CALL_STATE_RINGING vous pouvez placer votre logique pour bloquer l'appel entrant si le numéro entrant correspond à un numéro dans votre « Bloqué numéros liste". Pour que tout fonctionne, vous devez enregistrer cet écouteur dans votre service (dans la méthode onCreate et n'oubliez pas de le désinscrire dans onDestroy) et également ajouter une autorisation à votre manifeste Android qui vous permet de lire l'état du téléphone.

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

première chose que créer un recepteur de diffusion: 1) ajouter à manifester

2) le recepteur:

public class CallReciever extends BroadcastReceiver 
{ 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    ArrayList<String> rejectList=getListFromDb()//you need to implement this method 
    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) 
    { 
     String num = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     if (rejectList.Contains(num)) 
     { 
      disconnectCall(); 


     } 
    } 
public void disconnectCall(){ 
    try { 

     String serviceManagerName = "android.os.ServiceManager"; 
     String serviceManagerNativeName = "android.os.ServiceManagerNative"; 
     String telephonyName = "com.android.internal.telephony.ITelephony"; 
     Class<?> telephonyClass; 
     Class<?> telephonyStubClass; 
     Class<?> serviceManagerClass; 
     Class<?> serviceManagerNativeClass; 
     Method telephonyEndCall; 
     Object telephonyObject; 
     Object serviceManagerObject; 
     telephonyClass = Class.forName(telephonyName); 
     telephonyStubClass = telephonyClass.getClasses()[0]; 
     serviceManagerClass = Class.forName(serviceManagerName); 
     serviceManagerNativeClass = Class.forName(serviceManagerNativeName); 
     Method getService = // getDefaults[29]; 
     serviceManagerClass.getMethod("getService", String.class); 
     Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class); 
     Binder tmpBinder = new Binder(); 
     tmpBinder.attachInterface(null, "fake"); 
     serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder); 
     IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone"); 
     Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class); 
     telephonyObject = serviceMethod.invoke(null, retbinder); 
     telephonyEndCall = telephonyClass.getMethod("endCall"); 
     telephonyEndCall.invoke(telephonyObject); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     Log.e("GABI", 
       "FATAL ERROR: could not connect to telephony subsystem"); 
     Log.e("GABI", "Exception object: " + e); 
    } 
    } 

} 

maintenant cela ne fonctionnera une fois que vous avez commencé votre application au moins une fois. (vous pouvez appeler votre application pour démarrer un service au démarrage en utilisant un autre récepteur qui appellera startActivity) les permisions et la déclaration pour elle sont:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<receiver android:name="com.my.CustomReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
Questions connexes