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

时间:2012-04-22 09:55:07

标签: java android android-activity dialog multitasking

我想制作一个可以在任何应用上方打开的活动。

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

但是,我希望应用程序能够超越任何这样的应用程序:(在photoshop中制作):

我确实看到了这个问题Creating a system overlay window (always on top),但在ICS中,布局没有功能。 此外,我想从我的应用程序中给出一个对话框,而不会最小化其他应用程序......

2 个答案:

答案 0 :(得分:22)

有很多应用程序可以显示浮动视图,例如:airbrowser,LilyPad,Stick it,AirTerm,Smart Taskbar,aircalc ......

无论如何,为了实现这个功能,你必须有一个名为“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.

答案 1 :(得分:10)

我是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"

这样,您就可以创建浮动活动的错觉:

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

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

这是一个"浮动"计算器应用程序使用常规活动。请注意,计算器下方的活动属于另一个应用程序。

Tooleap Calculator Screenshot