开发者

Starting a View from a Service?

Already asked a similar question, yet without much luck.

Suppose I have a service and I need a view to pop up above it. In the same time, they both should be intractable, i.e. the user should be able to both click buttons within the view, as well as ones on 开发者_C百科the service in the background.

Starting a View from a Service?

Is this in theory possible? If yes, how should I initialize that view?

Thanks!


Yes it's possible, what you need to do is call the WindowManager service and add your view via the same.

WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
RelativeLayout layout=(RelativeLayout) inflater.inflate(R.layout.box,null);

You need a WindowManager.LayoutParams object which should contain the parameters for the layout

windowManager.addView(layout,params);

Well, adds the view


What you want is to add a view from your running service instance. This way you can persist the view across all activities - and from anywhere else. See this great example:

http://www.piwai.info/chatheads-basics/


Services most definitely can have a user interface: Input methods are an obvious example. See http://developer.android.com/resources/samples/SoftKeyboard/index.html for an example.


I guess you are misusing the word "Service". Service is invisible, Activities are visible.

There are no buttons in an Service!

So you have no choice! You should put both views in one Activity, and I would use a RelativeLayout and set the visibility of your chidren to GONE/Visible.

http://developer.android.com/reference/android/widget/RelativeLayout.html

Also using a popup and making the layout under it clickable will disturb the user. You are completely changing User experience. I strongly suggest too make your popup appear at the top/bottom of your initial layout


Services run in the background and do not have an UI. So you can not show something over a Service.

If you need a Service to notify user about something, then use Notification.

Ayou could use a Toast, but I advise against it, as it can confuse users since it can pop-out over another app's activity.


What you want is an Activity instead of a Service and a Dialog instead View. I suggest you read this document by google: http://developer.android.com/guide/topics/fundamentals.html

However to answer your question about both being interactable. This isn't possible. At any given time 1 and only 1 activity is on the top of the activity stack. The user can only interact with that activity. If you want something like a floating window then will have to create it yourself. Although keep in mind that goes against the android design principles.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜