100 puntos Cómo hacer una llamada en Android sin mostrar la interfaz de llamada del sistema
1. Utilice la reflexión para llamar a los métodos en "com.android.internal.telephony.PhoneFactory", "com.android.internal.telephony.CallManager" y "com.android.internal.telephony. Teléfono" .
El código es el siguiente:
llamada pública vacía (número de cadena, contexto de contexto) {
prueba {
clase final< ?> phoneFactoryClass = Class.forName("com.android.internal.telephony.PhoneFactory");
Método makeDefaultPhonesMethod = phoneFactoryClass.getDeclaredMethod("makeDefaultPhones", Context.class);
makeDefaultPhonesMethod. invoke(null, context);
Método getDefaultPhone = phoneFactoryClass.getDeclaredMethod("getDefaultPhone");
Objeto teléfono = getDefaultPhone.invoke(getDefaultPhone);
Clase final> callManagerClass = Class.forName("com.android.internal.telphony.CallManager");
Método getInstanceMethod = callManagerClass.getDeclaredMethod("getInstance");
Objeto callManager = getInstanceMethod.invoke(getInstanceMethod);
Clase final> phoneClass = Class.forName("com.android.internal.telephony.Phone");
Método registrarPhoneMethod = callManagerClass.getDeclaredMethod("registerPhone", phoneClass);
registerPhoneMethod.invoke(callManager, teléfono);
Método tal vezGetMethod = callManagerClass.getDeclaredMethod("getDefaultPhone");
Objeto teléfono1 = MaybeGetMethod.invoke(callManager);
Método marcar = phoneClass.getDeclaredMethod("dial", String.class);
dial.invoke (teléfono1, número);
} catch (ClassNotFoundException e) {
String cadena = e.getCause().toString();
Log.e ("CallTest ",cadena);
} catch (Excepción e) {
Cadena cadena = e.getCause().toString();
Registro .e( "Prueba de llamada", cadena);<
/p>
}
}
2. Agregue los siguientes permisos al manifiesto
paquete="com.example.callphone" android:sharedUserId="android.uid.system" android:versionCode="1" android:versionName="1.0" 3. Firme el apk generado con el sistema. Los diferentes sistemas operativos tienen firmas diferentes. Por ejemplo, yo uso java -jar signapk. .jar plataforma.x509.pem plataforma.pk8 Callphone_unsigned.apk Callphone_signed.apk. Entre ellos, platform.x509.pem platform.pk8 es diferente en diferentes sistemas operativos. Nota: Sólo después de firmar con SharedUserId y el sistema el programa puede tener permiso para ejecutarse. De la misma manera, el programa no se puede depurar, sólo se puede rastrear el registro.