2012-04-02 22 views
6

私は不要な呼び出しを制限する単純な呼び出しフィルタアプリケーションを作成しています。私は次のコードを使用してコールを制限しますが、私は以下のコードでこの行の問題を解決できません "com.android.internal.telephony.ITelephony telephonyService =(ITelephony)m.invoke(tm);"エラーメッセージが表示されますcom.android.internal.telephonyは、このエラーを解決する方法をアンドロイドのタイプに解決することはできません。このエラーを解決する方法 "com.android.internal.telephonyはタイプに解決できません" 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); 
     } 
} 

} 

私を助けてください。

+2

プロジェクトにITelephony.AIDLファイルを追加しましたか?パッケージ名を 'com/android/internal/telephony/ITelephony.AIDL'にする必要があります。 –

+0

いいえ、私はITelephony.AIDLファイルを追加しませんでした。それを追加する方法? –

+0

@яяσѕρєяK - このフォルダ構造は "myApp/App/src"の下にありますか?私はこのフォルダ構造を作成しようとしましたが、Andoid Studioエディタの自動完成は "import com.example.app ..."と入力したときに表示されません。 – buzibuzi

答えて

10

あなたのプロジェクトにITelephony.AIDLファイルを追加しましたか?追加した場合、パッケージ名はcom/android/internal/telephony/ITelephony.AIDL: である必要があります。詳細はBlocking Incoming callです。 AIDLファイルをダウンロードしてください。here

+0

Prashantは、srcフォルダ内にcom/android/internal/telephonyフォルダ構造を作成し、電話フォルダのファイル –

+0

ありがとうImranその作業... :) –

+0

これらの手順に従って、プロジェクトをきれいにする私のために働いた。ありがとうございました... –

0

リフレクションで内部/非表示のAndroid APIを使用しています。

有効なメソッド名を呼び出そうとしていることを確認してください。このAPIが変更されているか、開発中のバージョンに存在しない可能性があります。

5

リフレクションを使用すると、ITelephonyオブジェクトのメソッドを呼び出すことができるため、型を指定してAIDLファイルを追加する必要がなくなります。たとえば、電話を終了する:

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

ありがとうたくさん!鮮やかな答え! –

関連する問題