我將首先解釋我的應用程序。我的應用程序由在後臺運行的服務組成。該服務正在等待某個應用程序被打開(以我的情況爲例)。在應用程序啓動時使用其他應用程序的浮動活動
每當Spotify的打開它需要證明這個彈出按鈕和文本。它必須看起來像這樣:imgur.com/QHWZpu6
我已經嘗試過DialogFragment,但由於在服務類中沒有FragmentManager,所以不起作用。
。你們有什麼建議?提前致謝!
我將首先解釋我的應用程序。我的應用程序由在後臺運行的服務組成。該服務正在等待某個應用程序被打開(以我的情況爲例)。在應用程序啓動時使用其他應用程序的浮動活動
每當Spotify的打開它需要證明這個彈出按鈕和文本。它必須看起來像這樣:imgur.com/QHWZpu6
我已經嘗試過DialogFragment,但由於在服務類中沒有FragmentManager,所以不起作用。
。你們有什麼建議?提前致謝!
您關心的方法是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);
服務類不應該與UI線程交互。一個簡單的交互來克服這個問題,就是使用服務線程來更新SharedPreferences中存儲的內容,並在UI線程中設置共享首選項更改偵聽器,以便處理UI顯示的任何活動。
void onSharedPreferenceChanged (SharedPreferences sharedPreferences,
String key)
基於該圖像上,看來你真的想要當你的活動是不是當前有效的應用的UI顯示元素,你可能要考慮一個通知這個代替
據我所知,您可以在Service中調用intent。 –
你可以聲明您的活動作爲資源文件中的對話框顯示爲對話框。由於日誌方法在新設備上無效,因此無法檢測應用程序啓動。 –
如何使用微小的透明窗口活動? –