web-dev-qa-db-fra.com

mettre fin à l'appel entrant par programmation

C'est une question familière dans SO. et ce dont j'ai besoin, c'est de mettre fin à l'appel par programme. J'ai beaucoup cherché ...

http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-Android.htmlhttp://androiddesk.wordpress.com/2012/08/02/02/ blocage d'un appel sans intervention de l'utilisateur dans Android /

Rejeter l'appel entrant dans Android

Comment répondre/terminer un appel par programme dans Android 4.1?

http://www.emoticode.net/Android-sdk/block-incoming-and-outgoing-phone-calls-programmatically.html

Comment bloquer les appels dans Android

comment bloquer un appel de numéro mobile et la réception de messages dans Android développement d'applications?

et http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-Android.html

et bien plus de questions, réponses et suggestions ...

Tous disent utiliser ITelephonyService.aidl en combinaison avec TelephonyManager

et la solution fonctionne parfaitement sur de nombreux appareils, mais elle ne fonctionne pas sur Samsung S Duos . Je me bats depuis plus d'une semaine mais je n'ai pas trouvé de solution. Existe-t-il une API spéciale pour travailler avec ce type d'appareils? Comment puis-je rejeter un appel entrant? Aidez-moi, s'il vous plaît...

24
RuntimeException

Essayez ceci Bien sûr, cela fonctionnera. Ça marche bien pour moi.

Vous pouvez télécharger le fichier ITelephony.Java à partir de ITelephony.Java

Après cela, vous ajoutez la méthode pour terminer l'appel:

Fonction pour déconnecter l'appel

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.error(DialerActivity.this,
            "FATAL ERROR: could not connect to telephony subsystem");
    Log.error(DialerActivity.this, "Exception object: " + e); 
 }
}
66
Jebasuthan

Essayez cette fonction:

 private void endCall() {
        Context context = getApplicationContext();
        try {
            TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            Class<?> c = Class.forName(telephony.getClass().getName());

            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);

            ITelephony telephonyService = (ITelephony) m.invoke(telephony);

            // Funciona en 2.2
            // Funciona en 2.3.3
            telephonyService.endCall();

            logManager.debug("ITelepony was used (endCall)");
        } catch (Exception e) {
            logManager.error("Error ending call: " + e.getMessage());
            logManager.debug("Error ending call", e);
        }
    }