Posiadanie aplikacji działającej nad innymi aplikacjami

Chcę wykonać działanie, które można otworzyć nad dowolną aplikacją.

Normalnie, nawet gdy aktywność jest ustawiona jako okno dialogowe, po przełączeniu na moją aplikację zobaczysz moją aplikację, a w tle zobaczysz launcher:

Ale chcę, żeby aplikacja przechodziła nad każdą taką aplikacją: (made in photoshop):

Widziałem takie pytanie Tworzenie okna nakładki systemowej (zawsze na górze) , ale w ICS nie ma funkcjonalności do układ. Co więcej, chcę dać okno dialogowe z mojej aplikacji bez minimalizacji drugiej aplikacji...

Author: Community, 2012-04-22

2 answers

Istnieje wiele aplikacji, które pokazują pływający widok na wszystko, jak: airbrowser, LilyPad, Stick it, AirTerm, Smart Taskbar, aircalc ...

W każdym razie , aby osiągnąć tę funkcję, musisz mieć specjalne pozwolenie o nazwie " android.pozwolenie.SYSTEM_ALERT_WINDOW " i użyj czegoś takiego:

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.
 21
Author: android developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-27 13:44:29

Jestem jednym z twórców Tooleap SDK i również zajmowaliśmy się tym problemem. Zasadniczo nie musisz używać SYSTEM_ALERT_WINDOW, aby wyświetlić aktywność na innej. Możesz po prostu wyświetlić zwykłą "skurczoną" aktywność z przezroczystym tłem.

Aby utworzyć " zmniejszoną aktywność, Zmień paramy układu okna aktywności wysokości i szerokości:

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

this.getWindow().setAttributes(params);

Aby utworzyć przezroczyste tło Dodaj do definicji aktywności w pliku manifestu:

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

W ten sposób, ty może tworzyć iluzję pływającej aktywności:

Zauważ, że tylko działanie na pierwszym planie zostanie wznowione, podczas gdy działanie w tle zostanie wstrzymane. Ale dla większości aplikacji nie powinno to być problemem.

Teraz pozostaje tylko kiedy uruchomić pływającą aktywność.

Oto przykład "pływającej" aplikacji kalkulatora wykorzystującej regularną aktywność. Zauważ, że aktywność pod kalkulatorem należy do innej aplikacji.

Tooleap Kalkulator Zrzut Ekranu

 10
Author: Danny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 10:04:18