2011-09-08 3 views
5

Dans mon application, je vais maintenir une liste de contacts.Comment rejeter un appel par programmation dans android

Tous les appels provenant des contacts de la liste seront supprimés. Ils s'afficheront en cas d'appels manqués mais le téléphone ne sonnera pas.

+0

ContentObserver est le mot où votre boîte les meilleures pratiques –

+0

en double possible de [Comment bloquer les appels dans android] (http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android) –

+0

'MODIFY_PHONE_STATE' [l'autorisation est pour les applications système seulement] (http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread) (pour Android 2.3 et plus). Si vous voulez utiliser l'application uniquement pour le téléphone auquel vous avez accès, vous pouvez [créer votre application de système d'application] (http://projectmaxs.org/documentation/systemapp.html) – tchelidze

Répondre

15

d'abord créer cette interface:

public interface ITelephony { 

     boolean endCall(); 

     void answerRingingCall(); 

     void silenceRinger(); 

    } 

Ensuite, créez cette classe qui étend 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(); 
     } 
} 

Cela ne bloquer que seul numéro de téléphone, mais vous obtenez le point.

Dans votre manifeste ajouter ceci:

<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

salut je l'ai fait. Mais rien n'est arrivé. Comment créer cette interface ce que je veux dire une interface normale ou un fichier AADL – harish

+0

juste créer un intercafe normal. Mais vous pourriez avoir besoin de le placer dans un paquet appelé: com.android.internal.telephony essayer cela. –

+0

même si cela ne fonctionne pas, je pense que nous devons générer un fichier aidl. Mais je ne sais pas comment faire ça. – harish

2

Téléchargez la classe de ITelephony de here.

Ensuite, mettre dans un paquet (faire un nouveau package) de com.android.internal.telephony. ensuite importer le package à la classe appropriée et pour rejeter un appel utilise la méthode endCall()

Questions connexes