第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java ClassCastException:怎么會這樣?

Java ClassCastException:怎么會這樣?

浮云間 2023-05-17 15:08:27
我正在嘗試使用 Android Telephony Manager 結(jié)束通話(新的 Call Screening API 不適合我)。我在網(wǎng)上找到了很多例子,都和我下面的代碼非常相似。它編譯得很好,但我在線上得到了一個運行時 ClassCastExceptiontelephonyService = (ITelephony) m.invoke(tm); 例外是java.lang.ClassCastException:  com.android.internal.telephony.ITelephony$Stub$Proxy  cannot be cast to com.ramrod.MyApp.IncomingCallReceiver$ITelephony我的代碼是public class IncomingCallReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        ITelephony telephonyService;        try {            String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);            String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);            if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){                TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);                try {                    Method m = tm.getClass().getDeclaredMethod("getITelephony");                    m.setAccessible(true);                    telephonyService = (ITelephony) m.invoke(tm);                    if ((number != null)) {                        telephonyService.endCall();                    }                } catch (Exception e) {                    e.printStackTrace();                }                Toast.makeText(context, "Ring " + number, Toast.LENGTH_SHORT).show();            }            if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){                Toast.makeText(context, "Answered " + number, Toast.LENGTH_SHORT).show();            }            if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){                Toast.makeText(context, "Idle "+ number, Toast.LENGTH_SHORT).show();            }        } catch (Exception e) {            e.printStackTrace();        }    }我也試過導(dǎo)入com.android.internal.telephony(包括 ITelephony),但這不符合要求。
查看完整描述

1 回答

?
互換的青春

TA貢獻1797條經(jīng)驗 獲得超6個贊

它編譯是因為你使用了反射:Object Method.invoke()。

反射在編譯時通常很好,但在運行時可能不太好。


在這里,您嘗試轉(zhuǎn)換的實例是在運行時Proxy,更準(zhǔn)確地說是嵌套類:com.android.internal.telephony.ITelephony.Stub.Proxy。


ITelephony您定義為嵌套類的接口MyApp.IncomingCallReceiver不是該類的實例Proxy。這是肯定的,因為它沒有擴展:


public static interface ITelephony {

    boolean endCall();

    void answerRingingCall();

    void silenceRinger();

}

而類轉(zhuǎn)換異常。


我想這Proxy是生成的實現(xiàn)com.android.internal.telephony.ITelephony,所以您需要做的可能只是導(dǎo)入該類并轉(zhuǎn)換為此類:


import com.android.internal.telephony.ITelephony;

//..    

telephonyService = (ITelephony) m.invoke(tm); 


查看完整回答
反對 回復(fù) 2023-05-17
  • 1 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號