2016-07-30 113 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。 –