解決Andriod P及以上反射調(diào)用系統(tǒng)API時(shí)出現(xiàn)彈框問(wèn)題

現(xiàn)象

原因

Android P開(kāi)始,限制了對(duì)系統(tǒng)API通過(guò)反射進(jìn)行調(diào)用。 如果發(fā)生了,就會(huì)彈出上面的彈框。

解決方案

  1. 根本解決方案
    不要通過(guò)反射調(diào)用系統(tǒng)API。
  2. 規(guī)避方案
    如果不能根治,可以先屏蔽掉這個(gè)彈框。
    app初始化時(shí)調(diào)用下面這個(gè)函數(shù)即可。
private void closeAndroidPDialog(){
        try {
            Class aClass = Class.forName("android.content.pm.PackageParser$Package");
            Constructor declaredConstructor = aClass.getDeclaredConstructor(String.class);
            declaredConstructor.setAccessible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            Class cls = Class.forName("android.app.ActivityThread");
            Method declaredMethod = cls.getDeclaredMethod("currentActivityThread");
            declaredMethod.setAccessible(true);
            Object activityThread = declaredMethod.invoke(null);
            Field mHiddenApiWarningShown = cls.getDeclaredField("mHiddenApiWarningShown");
            mHiddenApiWarningShown.setAccessible(true);
            mHiddenApiWarningShown.setBoolean(activityThread, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

參考資料

https://www.cnblogs.com/bluestorm/p/10276110.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容