让应用程序运行在其他应用程序

我想做一个可以在任何应用程序上方打开的活动。

通常,即使将活动设置为对话框,当切换到我的应用程序时,您会看到我的应用程序,并在后台看到启动程序:

但是,我想要的应用程序将超出任何这样的应用程序:(在Photoshop中制作):

我确实看到这个问题创build一个系统覆盖窗口(总是在最前面) ,但是在ICS中没有布局的function。 此外,我想给我的应用程序对话框,而不会最小化其他应用程序…

Solutions Collecting From Web of "让应用程序运行在其他应用程序"

有很多的应用程序,显示在一切浮动视图上:airbrowser,LilyPad,Stick it,AirTerm,Smart Taskbar,aircalc …

无论如何,为了实现这个function,你必须有一个特殊的权限,称为“android.permission.SYSTEM_ALERT_WINDOW”,并使用类似的东西:

final WindowManager.LayoutParams param=new WindowManager.LayoutParams(); param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; final View view=findViewById(R.id.my_floating_view); final ViewGroup parent=(ViewGroup)view.getParent(); if(parent!=null) parent.removeView(view); param.format=PixelFormat.RGBA_8888; param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; param.gravity=Gravity.TOP|Gravity.LEFT; param.width=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().width; param.height=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().height; final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE); wmgr.addView(view,param); // TODO handle overlapping title bar and/or action bar // TODO you must add logic to remove the view // TODO you must use a special permission to use this method :android.permission.SYSTEM_ALERT_WINDOW // TODO if you wish to let the view stay when leaving the app, make sure you have a foreground service running. 

我是Tooleap SDK的开发人员之一,我们也处理了这个问题。 基本上,你不需要使用SYSTEM_ALERT_WINDOW在另一个之上显示一个活动。 您可以只显示一个带有透明背景的常规“收缩”活动。

要做一个“缩小的活动,改变活动窗口布局参数的高度和宽度:

 WindowManager.LayoutParams params = getWindow().getAttributes(); params.x = ...; params.y = ...; params.width = ...; params.height = ...; this.getWindow().setAttributes(params); 

要使透明背景添加到清单文件中的活动定义:

 android:theme="@android:style/Theme.Translucent" 

这样,你可以创build一个浮动活动的幻觉:

请注意,只有前景活动会被恢复,而后台活动被暂停。 但对于大多数应用程序,这不应该是一个问题。

现在剩下的就是何时开展浮动活动。

这里是一个使用常规活动的“浮动”计算器应用程序的例子。 请注意,计算器下方的活动属于其他应用程序。

Tooleap Calculator截图