2016-07-30 111 views
0

我將首先解釋我的應用程序。我的應用程序由在後臺運行的服務組成。該服務正在等待某個應用程序被打開(以我的情況爲例)。在應用程序啓動時使用其他應用程序的浮動活動

每當Spotify的打開它需要證明這個彈出按鈕和文本。它必須看起來像這樣:imgur.com/QHWZpu6

我已經嘗試過DialogFragment,但由於在服務類中沒有FragmentManager,所以不起作用。

。你們有什麼建議?提前致謝!

+0

你可以聲明您的活動作爲資源文件中的對話框顯示爲對話框。由於日誌方法在新設備上無效,因此無法檢測應用程序啓動。 –

+0

如何使用微小的透明窗口活動? –

回答

0

檢測,如果應用程序正在運行/推出

看看ActivityManager

您關心的方法是ActivityManager.RunningAppProcessInfo()。它將當前正在運行的應用程序的包名作爲列表返回。你所要做的就是循環訪問列表,並檢查它是否與應用程序包匹配,在你的情況下,它是spotify。

ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> appInfos = activityManager.getRunningAppProcesses(); 
for(int i = 0; i < appInfos.size(); i++) 
{ 
    if(appInfos.get(i).processName.equals("package name")) 
    { 
     //USE INTENT TO START YOUR ACTIVITY AS EXPLAINED BELOW 
    } 
} 

啓動活動從服務

從服務開始活動,使用意向如下:

Intent popUpIntent = new Intent(this, MyActivity.class); 
popUpIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(popUpIntent); 

彈出活動/顯示爲對話框

爲了顯示你的活動作爲對話框,您只需要在清單文件中將活動主題設置爲「Theme.Dialog」

<activity 
    ... 
android:theme="@android:style/Theme.Dialog" 
    ... 
    /> 

或者你可以動態調用setTheme()Activity類裏面設置的活動主題。

setTheme(android.R.style.Theme_Dialog); 
+0

非常感謝您的詳細評論!你真的可以像我給你的例子製作一個Theme_Dialog嗎? – Robbertie

+0

@Robbertie你可以讓你的對話活動看起來像任何東西。它像一個正常的活動,所以它看起來就像你在佈局文件中設計的一樣。 –

+0

非常感謝你的工作。唯一的問題是不能保持當前的應用程序作爲背景,但它是我的主要活動。所以,而不是在後臺spotify它有我的應用程序佈局.. – Robbertie

0

服務類不應該與UI線程交互。一個簡單的交互來克服這個問題,就是使用服務線程來更新SharedPreferences中存儲的內容,並在UI線程中設置共享首選項更改偵聽器,以便處理UI顯示的任何活動。

void onSharedPreferenceChanged (SharedPreferences sharedPreferences, 
       String key) 

基於該圖像上,看來你真的想要當你的活動是不是當前有效的應用的UI顯示元素,你可能要考慮一個通知這個代替

+0

據我所知,您可以在Service中調用intent。 –