Android部分手機“後臺彈出介面許可權”解決方案

山有木xi發表於2020-12-06

在前段時間的程式設計開發中,突然發現一個小坑的地方,其實在Android官方中並沒有限制,但是在很多廠商的系統中卻做了修改限制,那就是“後臺彈出介面許可權”

最開始發現這個問題,是因為我的懸浮框當應用處於後臺時,懸浮框所有功能失效,我一開始以為是出了什麼bug,後來才發現這是系統的問題,例如小米系統就有這個限制

為了繞過這個許可權,也做過一些處理

例如:

  1. 透過前臺服務的方式啟動後臺應用

  2. 引導使用者開啟相應許可權

  3. 獲取當前堆疊,判斷應用是否被開啟,如果未被開啟則強行將應用提至前臺

經過測試,第一種方法無效。第二種方案是必備的,讓使用者開啟許可權自然是最好的,第三種方法則是比較取巧的方法,這裡著重講第三種方案

先判斷我們的介面是否已經被呼叫到前臺

ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = activityManager.getRunningTasks(1);
if (list != null && list.size() > 0) {
    ComponentName cpn = list.get(0).topActivity;
    Log.e("className",""+cpn.getClassName());
    if (className.equals(cpn.getClassName())) {
        return true;
    }
}

然後獲取在相應的介面獲取activityManager

val activityManager =
            context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

最後利用系統的當前的task堆疊

  val taskInfoList: List<ActivityManager.RunningTaskInfo> =
            activityManager.getRunningTasks(20)

然後迴圈找到自己有用的task,將其調至強行切換到前臺即可

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2739838/,如需轉載,請註明出處,否則將追究法律責任。

相關文章