我将首先解释我的应用程序。我的应用程序由在后台运行的服务组成。该服务正在等待某个应用程序被打开(以我的情况为例)。在应用程序启动时使用其他应用程序的浮动活动
每当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。 –
你可以声明您的活动作为资源文件中的对话框显示为对话框。由于日志方法在新设备上无效,因此无法检测应用程序启动。 –
如何使用微小的透明窗口活动? –