小米手機(jī)6.0系統(tǒng)以上WRITE_SETTINGS和SYSTEM_ALERT_WINDOW權(quán)限回調(diào)結(jié)果總是返回False的解決方法

重點(diǎn)關(guān)注AppOpsManager這個類。要想知道這個類是干嘛的,直接去谷歌官方開發(fā)者文檔中去了解攻锰。
在AppOpsManager這個類中,可以看到


Permissions.png

懸浮窗和修改系統(tǒng)設(shè)置的權(quán)限碼是24和25础米。并且這個類的變量土居,方法都是隱藏的。
接下來,我們需要調(diào)用checkOp方法來返回真正的權(quán)限回調(diào)結(jié)果失球。

   /**
     * Do a quick check for whether an application might be able to perform an operation.
     * This is <em>not</em> a security check; you must use {@link #noteOp(int, int, String)}
     * or {@link #startOp(int, int, String)} for your actual security checks, which also
     * ensure that the given uid and package name are consistent.  This function can just be
     * used for a quick check to see if an operation has been disabled for the application,
     * as an early reject of some work.  This does not modify the time stamp or other data
     * about the operation.
     * @param op The operation to check.  One of the OP_* constants.
     * @param uid The user id of the application attempting to perform the operation.
     * @param packageName The name of the application attempting to perform the operation.
     * @return Returns {@link #MODE_ALLOWED} if the operation is allowed, or
     * {@link #MODE_IGNORED} if it is not allowed and should be silently ignored (without
     * causing the app to crash).
     * @throws SecurityException If the app has been configured to crash on this op.
     * @hide
     */
    public int checkOp(int op, int uid, String packageName) {
        try {
            int mode = mService.checkOperation(op, uid, packageName);
            if (mode == MODE_ERRORED) {
                throw new SecurityException(buildSecurityExceptionMsg(op, uid, packageName));
            }
            return mode;
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

由于這個方法是隱藏的,所以需要用反射的方法來調(diào)用。也可以用這個庫來進(jìn)行調(diào)用 https://github.com/anggrayudi/android-hidden-api
這個庫只要直接將原本的SDK替換成這個庫的SDK就能夠不用通過反射來調(diào)用隱藏方法实苞。
反射調(diào)用checkOp的步驟:

 private static boolean isPermissionGranted(String permissionCode) {
        try {
            Object object = getSystemService(Context.APP_OPS_SERVICE);
            if (object == null) {
                return false;
            }
            Class localClass = object.getClass();
            Class[] arrayOfClass = new Class[3];
            arrayOfClass[0] = Integer.TYPE;
            arrayOfClass[1] = Integer.TYPE;
            arrayOfClass[2] = String.class;
            Method method = localClass.getMethod("checkOp", arrayOfClass);

            if (method == null) {
                return false;
            }
            Object[] arrayOfObject = new Object[3];
            arrayOfObject[0] = Integer.valueOf(permissionCode);
            arrayOfObject[1] = Integer.valueOf(Binder.getCallingUid());
            arrayOfObject[2] = getPackageName();
            int m = ((Integer) method.invoke(object, arrayOfObject)).intValue();
            return m == AppOpsManager.MODE_ALLOWED;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

然后將懸浮窗和修改系統(tǒng)設(shè)置的權(quán)限碼傳進(jìn)去就好豺撑。
最后返回的結(jié)果既是真正的權(quán)限回調(diào)的結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末黔牵,一起剝皮案震驚了整個濱河市聪轿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猾浦,老刑警劉巖陆错,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異金赦,居然都是意外死亡音瓷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門夹抗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绳慎,“玉大人,你說我怎么就攤上這事漠烧⌒臃撸” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵已脓,是天一觀的道長珊楼。 經(jīng)常有香客問我,道長摆舟,這世上最難降的妖魔是什么亥曹? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮恨诱,結(jié)果婚禮上媳瞪,老公的妹妹穿的比我還像新娘。我一直安慰自己照宝,他們只是感情好蛇受,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厕鹃,像睡著了一般兢仰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剂碴,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天把将,我揣著相機(jī)與錄音,去河邊找鬼忆矛。 笑死察蹲,一個胖子當(dāng)著我的面吹牛请垛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洽议,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼宗收,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亚兄?” 一聲冷哼從身側(cè)響起混稽,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎审胚,沒想到半個月后匈勋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膳叨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年颓影,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懒鉴。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡诡挂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出临谱,到底是詐尸還是另有隱情璃俗,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布悉默,位于F島的核電站城豁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抄课。R本人自食惡果不足惜唱星,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跟磨。 院中可真熱鬧间聊,春花似錦、人聲如沸抵拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僵蛛。三九已至尚蝌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間充尉,已是汗流浹背飘言。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驼侠,地道東北人姿鸿。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓泵喘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親般妙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容