8

不要な通話を制限する簡単な通話フィルター アプリケーションを作成しています。次のコードを使用して通話を制限しますが、次のコードのこの行の問題を解決できません " com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm); " エラーメッセージ 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);
        }
}

}

私を助けてください 。

4

4 に答える 4

11

プロジェクトにファイルを追加しましITelephony.AIDLたか? 追加した場合、パッケージ名は次のようにする必要があります。com/android/internal/telephony/ITelephony.AIDL詳細については、着信コールをブロックしています。ここからAIDLファイルをダウンロード

于 2012-04-02T06:14:38.420 に答える
8

リフレクションを使用して 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);
于 2013-11-20T15:20:56.817 に答える
0

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

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

于 2012-04-02T06:49:27.120 に答える