android - una - mi celular no me deja contestar llamadas
terminar la llamada entrante programáticamente (3)
Esta es una pregunta familiar en SO. Y lo que necesito es terminar la llamada programáticamente. He buscado mucho ...
http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-android.html http://androiddesk.wordpress.com/2012/08/02/blocking-a-call-without-user-intervention-in-android/
Rechazar llamada entrante en android
¿Cómo responder / finalizar una llamada programáticamente en Android 4.1?
http://www.emoticode.net/android-sdk/block-incoming-and-outgoing-phone-calls-programmatically.html
Cómo bloquear llamadas en Android
y http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-android.html
Y muchas más preguntas, respuestas y sugerencias ...
Todos están diciendo que use ITelephonyService.aidl
en combinación con TelephonyManager
y la solución funciona perfectamente en muchos dispositivos, pero no funciona en Samsung S Duos . Estoy luchando más de una semana pero no conseguí una solución ... ¿hay alguna API especial con la que trabajar en este tipo de dispositivos? ¿Cómo puedo rechazar la llamada entrante? por favor, ayúdame...
En su aplicación, cree un paquete (com.android.internal.telephony) en la carpeta java. Y luego copie la interfaz ITelephone en ese paquete
Fuente de la interfaz del teléfono: http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/com/android/internal/telephony/ITelephony.java/?v=source
Código para desconexión de llamada:
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);
telephonyService.answerRingingCall();
} catch (Exception e) {
}
También agrega permisos para usar estos métodos:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
Intenta esto Claro que funcionará. Esta trabajando bien para mi.
Puede descargar el archivo ITelephony.java desde ITelephony.java
Después de que agregue el método para finalizar la llamada:
Función para desconectar llamada
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);
}
}
Prueba esta función:
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);
}
}