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