在Android中,如何判斷當前是否在桌面上

2021-08-27 15:55:58 字數 1552 閱讀 7007

在做android上面的懸浮窗的時候,一般需要去判斷一種情況,即當前是否是在桌面上(即按下home鍵時回到的手機介面):

1)在桌面上,才展示懸浮窗

2)不在桌面上,則隱藏懸浮窗

桌面(home),其實本質上也是乙個應用程式,也是由activity組成的,所以乙個手機裡面有可能裝有多個桌面應用,這是第一點。

第二點,要判斷當前是否在桌面上,其實也就是要判斷當前顯示的這個activity,是不是屬於乙個桌面應用,所以必須先獲取當前應用的包名來判斷。

在android中,可通過以下幾個步驟來判斷當前是否在桌面上:

1)獲取所有桌面應用的包名,可通過packagemanager來實現。

listnames = new arraylist();

packagemanager packagemanager = this.getpackagemanager();

intent intent = new intent(intent.action_main);

intent.addcategory(intent.category_home);

listlist = packagemanager.queryintentactivities(intent, packagemanager.match_default_only);

for(resolveinfo resolveinfo : list)

桌面應用有可能不只包含乙個activity的,那就要找到的是intent.action_main所對應的那個activity,才是啟動桌面的第乙個activity,才是我們看到的桌面。其次其對應的的category必須是category_home的,不然系統可沒法辨別出其是不是桌面應用。

所以要將對應的intent,傳給packagemanager.queryintentactivities方法,從而獲取所有能夠解析這個intent的桌面應用,然後將對應的activity的包名給拿出來。

resolveinfo,其實存放的就是的對應的每乙個activity的資訊。

2)要獲取當前activity(桌面)的包名,然後判斷其是否在第一步所包含的home activity列表中。

activitymanager activitymanager = (activitymanager)getsystemservice(context.activity_service);

listlist = activitymanager.getrunningtasks(1);

ishome = names.contains(list.get(0).topactivity.getpackagename());

利用activitymanager獲取當前執行的眾多task,然後拿出第乙個task(get(0))中最頂的乙個activity(topactivty),然後判斷其包名是否在names中,如果是,表明當前的確是在某乙個桌面(的activity)上面。

3)最後,獲取當前task是需要許可權的,所以需要在androidmanifest.xml中新增許可權。

Android判斷當前時間是否在某個時間段

開發中有時候需求是要我們判斷當前時間是否是在當天的某個時間段,比如判斷某個操作是否是在工作時間 這個時間可以自定義 只需要寫個方法如下 判斷當前系統時間是否在指定時間的範圍內 beginhour 開始小時,例如22 beginmin 開始小時的分鐘數,例如30 endhour 結束小時,例如 8 e...

android 如何判斷當前頁面是否是桌面

最近在自己的專案中需要用到判斷乙個應用是否啟動的功能。為了擴充套件一下知識點,就把題目定成了如果判斷當前顯示是否為桌面。其實這個過程有三個知識點。1.如何找出正在執行的任務?android系統是支援多工的,找到所有執行的任務是關鍵。2.如何找出當前正在執行的任務?雖然android是多工的系統,但是...

MySQL中如何判斷當前是字元

使用length與char length兩個函式 length 是計算欄位的長度乙個漢字是算三個字元,乙個數字或字母算乙個字元 char length 不管漢字還是數字或者是字母都算是乙個字元 對同一字段分別使用 length char length計算長度,並進行比較 長度相同則字段中無漢字,不相...