我会先解释我的应用程序。我的应用程序包含一个在后台运行的服务。该服务正在等待某个应用程序被打开(在我的情况下发现)。
每当Spotify打开时,都需要显示带有按钮和文本的弹出窗口。它基本上看起来像这样:imgur.com/QHWZpu6
我已经尝试过DialogFragment,但由于服务类中没有FragmentManager,因此无法正常工作。
你们有什么建议吗?提前谢谢!
答案 0 :(得分:1)
您关注的方法是ActivityManager.RunningAppProcessInfo()。它以列表的形式返回当前正在运行的应用程序的包名称。您所要做的就是遍历列表并检查它是否与app package匹配,在您的情况下是appify。
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:
Intent popUpIntent = new Intent(this, MyActivity.class);
popUpIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(popUpIntent);
为了将您的活动显示为对话框,您只需将活动主题设置为&#34; Theme.Dialog&#34;在您的清单文件中
<activity
...
android:theme="@android:style/Theme.Dialog"
...
/>
或者,您可以通过调用Activity类中的setTheme()来动态设置活动中的主题。
setTheme(android.R.style.Theme_Dialog);
答案 1 :(得分:0)
服务类不应与UI线程交互。通过此简单的交互是使用服务线程更新存储在SharedPreferences中的内容,并在UI线程中设置共享首选项更改侦听器,以用于处理UI显示的任何活动。
void onSharedPreferenceChanged (SharedPreferences sharedPreferences,
String key)
根据该图片,当您的活动当前不是活动应用程序时,您实际上想要显示UI元素,您可能想要考虑通知