2012-04-02 6 views
6

Ich erstelle einfache Anruffilter-Anwendung, die unerwünschte Anrufe beschränken. Ich benutze folgenden Code, um Anruf zu beschränken, aber ich bin nicht in der Lage, Problem dieser Linie in unter Code "com.android.internal.telephony.ITelephony TelefonieService = (ITelefony) m.invoke (tm);" es zeigen die Fehlermeldung com.android.internal.telephony kann nicht in einen Android-Typ aufgelöst werden, um diesen Fehler zu beheben.wie dieser Fehler zu beheben "com.android.internal.telephony kann nicht zu einem Typ aufgelöst werden" in 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); 
     } 
} 

} 

Bitte helfen Sie mir.

+2

Sie haben ITelefony.AIDL Datei in Ihrem Projekt hinzugefügt? und wenn Sie hinzugefügt haben, dann muss der Paketname muss sein Paketname muss 'com/android/internal/Telefonie/ITelefony.AIDL' –

+0

Nein, ich habe ITelefony.AIDL Datei nicht hinzugefügt. wie man es hinzufügt? –

+0

@ ρяσѕρєя K - Wird diese Ordnerstruktur unter "myApp/App/src" angezeigt? Ich habe versucht, diese Ordnerstruktur zu erstellen, aber der Andoid Studio-Editor automatisch abgeschlossen zeigt es nicht bei der Eingabe von "Import com.example.app ..." – buzibuzi

Antwort

10

Sie haben ITelephony.AIDL Datei in Ihrem Projekt hinzugefügt? und wenn Sie hinzugefügt haben, dann muss Ihr Paketname com/android/internal/telephony/ITelephony.AIDL: für weitere Informationen Blocking Incoming call sein. Download AIDL-Datei von here

+0

Prashant, machen com/android/interne/Telefonie Ordnerstruktur in src Ordner und legte aidl Datei in Telefonie-Ordner –

+0

Vielen Dank Imran seine Arbeit ... :) –

+0

folgende Schritte und die Reinigung des Projekts funktionierte für mich. Vielen Dank ... –

0

Sie verwenden interne/versteckte Android-APIs mit Reflektion.

Überprüfen Sie, ob Sie versuchen, einen gültigen Methodennamen aufzurufen. Es besteht eine große Chance, dass sich diese API in der Version, für die Sie entwickeln, geändert hat oder nicht existiert.

5

Sie können reflection verwenden, um Methoden für das ITelefony-Objekt aufzurufen. Dadurch müssen Sie den Typ nicht angeben und die AIDL-Datei hinzufügen. Zum Beispiel, einen Anruf zu beenden:

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

Vielen Dank! Brillante Antwort! –

Verwandte Themen