как решить эту ошибку "com.android.internal.telephony не может быть разрешен к типу" в Android - PullRequest
6 голосов
/ 02 апреля 2012

Я создаю простое приложение фильтра вызовов, которое ограничивает нежелательные вызовы. Я использую следующий код, чтобы ограничить вызов, но я не могу решить проблему этой строки в коде ниже " com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke (tm); " it показать сообщение об ошибке 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);
        }
}

}

Пожалуйста, помогите мне.

Ответы [ 3 ]

10 голосов
/ 02 апреля 2012

вы добавили ITelephony.AIDL файл в ваш проект?и если вы добавили, то имя вашего пакета должно быть com/android/internal/telephony/ITelephony.AIDL: для получения дополнительной информации Блокировка входящего вызова .скачать файл AIDL с здесь

7 голосов
/ 20 ноября 2013

Вы можете использовать отражение для вызова методов объекта 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 голосов
/ 02 апреля 2012

Вы используете внутренние / скрытые Android API с отражением.

Убедитесь, что вы пытаетесь вызвать допустимое имя метода - велика вероятность того, что этот API изменился или не существует в версии, для которой вы разрабатываете.

...