前言
小米手機有個特殊的權限,"後臺彈出界面(允許應用在後臺彈出界面)",默認是拒絕的,如下圖所示.
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;
}
總結
目前採用第一個方案,去合理的繞過這個機制,當然實在不行了,第二個方法可以做兼容處理.
米哥,別再折騰米粉開發者了,以後加油,多遵循谷歌規範,多給開發者帶來福利,奧利給!!!