应用程序启动时,浮动活动将在其他应用程

时间:2016-07-30 19:58:31

标签: android android-layout android-fragments

我会先解释我的应用程序。我的应用程序包含一个在后台运行的服务。该服务正在等待某个应用程序被打开(在我的情况下发现)。

每当Spotify打开时,都需要显示带有按钮和文本的弹出窗口。它基本上看起来像这样:imgur.com/QHWZpu6

我已经尝试过DialogFragment,但由于服务类中没有FragmentManager,因此无法正常工作。

你们有什么建议吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

检测应用程序是否正在运行/启动

查看ActivityManager

您关注的方法是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元素,您可能想要考虑通知

相关问题