小米手機"後臺彈出界面(允許應用在後臺彈出界面)"權限問題解決方案

前言

 小米手機有個特殊的權限,"後臺彈出界面(允許應用在後臺彈出界面)",默認是拒絕的,如下圖所示.

 

OK,故事就此展開.

 

允許後臺彈出界面

 

  顧名思義,這個權限意思就是說,我應用在後臺了,如果沒有開啓這個權限,通過Intent啓動Activity的方法將不會啓動界面成功,並且小米會輸出以下日誌.

"com.android.server.am.ExtraActivityManagerService: MIUILOG- Permission Denied Activity".

 真是很坑阿,米哥,要玩死我們開發者阿,就不能遵從點谷歌規範,完善開發生態嗎.

看到有些博客竟然這樣說:

 米哥,想掙錢掙瘋了? 多聽聽開發者的聲音,遵循谷歌規範,加油,奧力給!!!

 

解決方案

 

 經測試,華爲手機沒有這個權限,目前vivo/oppo/小米手機有這個“後臺彈出界面”權限.

1.既然這樣,得想辦法繞過這個後臺啓動機制。一般來說,從後臺啓動Activity的時候,Activity當中會啓動一個Dialog來提示用戶,ok,那我直接不啓動Activity,直接彈出Dialog不就行了,完美繞過這個機制.

2.經過我不懈的搜索,我發現了一個方法,測試可用,小米官方提供代碼如下:

  

   private boolean isAllowed() {
        AppOpsManager ops = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
        try {
            int op = 10021;
            Method method = ops.getClass().getMethod("checkOpNoThrow", new Class[]{int.class, int.class, String.class});
            Integer result = (Integer) method.invoke(ops, op, Process.myUid(), getPackageName());
            return result == AppOpsManager.MODE_ALLOWED;

        } catch (Exception e) {
            Log.e(TAG, "not support");
        }
        return false;
    }

 

總結

 

  目前採用第一個方案,去合理的繞過這個機制,當然實在不行了,第二個方法可以做兼容處理.

  米哥,別再折騰米粉開發者了,以後加油,多遵循谷歌規範,多給開發者帶來福利,奧利給!!!

 

 

 

發佈了60 篇原創文章 · 獲贊 110 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章