2012-04-02 15 views
6

Estoy creando una aplicación de filtro de llamadas simple que restringe las llamadas no deseadas. utilizo el siguiente código para restringir la llamada, pero no puedo resolver el problema de esta línea en el siguiente código "com.android.telephony.ITelephony telephonyService = (ITelephony) m.invoke (tm);" muestra el mensaje de error com.android.internal.telephony no se puede resolver a un tipo en android cómo resolver este error.cómo resolver este error "com.android.internal.telephony no se puede resolver a un tipo" en android

public class CallBlockReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

    } 

    private void getTeleService(Context context) { 
     TelephonyManager tm = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     try { 
      // Java reflection to gain access to TelephonyManager's 
      // ITelephony getter 
      Log.v("", "Get getTeleService..."); 
      Class c = Class.forName(tm.getClass().getName()); 
      Method m = c.getDeclaredMethod("getITelephony"); 
      m.setAccessible(true); 
      com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e("", 
        "FATAL ERROR: could not connect to telephony subsystem"); 
      Log.e("", "Exception object: " + e); 
     } 
} 

} 

Por favor, ayúdame.

+2

¿ha agregado el archivo ITelephony.AIDL en su proyecto? y si ha agregado su nombre de paquete debe ser el nombre del paquete debe ser 'com/android/internal/telefonía/ITelephony.AIDL' –

+0

no, yo no agregué el archivo ITelephony.AIDL. cómo agregarlo? –

+0

@ ρяσѕρєя K - ¿esta estructura de carpeta se encuentra en "myApp/App/src"? intenté crear esta estructura de carpetas, pero el editor de Andoid Studio autocompletado no lo muestra al escribir "import com.example.app ..." – buzibuzi

Respuesta

10

ha agregado el archivo ITelephony.AIDL en su proyecto? y si lo ha agregado, el nombre de su paquete debe ser com/android/internal/telephony/ITelephony.AIDL: para obtener más información Blocking Incoming call. descargar el archivo AIDL desde here

+0

Prashant, hacer que la estructura de carpetas com/android/internal/telephony dentro de la carpeta src y poner helpl archivo en la carpeta de telefonía –

+0

Muchas gracias Imran está trabajando ... :) –

+0

siguiendo estos pasos y la limpieza del proyecto funcionó para mí. Muchas gracias ... –

0

Estás usando API internas/ocultas de Android con reflejo.

Comprueba que estás intentando invocar un nombre de método válido: hay muchas posibilidades de que esta API haya cambiado o no exista en la versión que estás desarrollando.

5

Puede usar la reflexión para invocar métodos en el objeto ITelephony, evitando así la necesidad de especificar el tipo y agregar el archivo AIDL. Por ejemplo, al finalizar una llamada:

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
Class<?> c = Class.forName(tm.getClass().getName()); 
Method m = c.getDeclaredMethod("getITelephony"); 
m.setAccessible(true); 
Object telephonyService = m.invoke(tm); 
Class<?> telephonyServiceClass = Class.forName(telephonyService.getClass().getName()); 
Method endCallMethod = telephonyServiceClass.getDeclaredMethod("endCall"); 
endCallMethod.invoke(telephonyService); 
+0

¡Muchas gracias! Brillante respuesta! –

Cuestiones relacionadas