I've been working on a feature similar to Facebook's chat heads - a feature which needs to be active for our users even if they leave our app to go check email, etc. It needs to be able to create AlertDialogs via javascript - from a place that isn't impacted when the user switches Activities inside our app. It's OK for the feature to close/hide when the user leaves the app to do something else - however it must still be present when they come back.
Other than using a Service I haven't been able to think of another way to let users interact with us while they're off doing other things. When I use a service to create the webview via WindowManager the webview's JsDialogHelper detects that the context is not an activity and prevents it from showing AlertDialogs.
Any ideas would be most helpful around making this work. We need to allow AlertDialogs to pop up and be interactive for this feature to be helpful. We need the webview to stick around between activity transitions.
Is it possible to extend JsDialogHelper so I can get it to work with my code? Is there a better way to have a facebook chat heads like feature using webviews in an android app that I haven't thought of yet? I'm open to complete rewrites if it gets the user experience I'm looking for.
I suppose you can create a
JavaScript Interface
for two way communication between youractivity
andWebView
. I have not tried the solution myself, but have stumbled before on that. The SO Question posted here might help you on that.I suppose your
WebView
will reside in an activity too, you can use the Activity's context to pop theAlertDialog
. You just need a method in the activity which you'd like to call in the webview (I'd just pass the Activity object in theaddJavascriptInterface
method).Another way would be to use a Service and initiate a new Activity which implements
Theme.dialog
in it to be used as AlertDialog.Let me know if it doesn't solve your problem.
You can't display an
AlertDialog
outside of anActivity
.However, you could build a custom
View
which looks like the dialog you want to show, and display it in the window viaWindowManager
.For example:
The code above displays your custom view in the center of the screen, on top of everything else. You could inflate the view via
LayoutInflater
.You also need to add the permission in the manifest in order to display the view.
You can display the
Dialog
from the service, by setting the window type asTYPE_SYSTEM_ALERT
. Remember to communicate back the action taken by the user using theJsResult
instance passed toonJsAlert
.Add the required permissions to the manifest file:
Alternate solution: If the web application can be built specific to android webview, then you can create Javascript interfaces which will allow Javascript code to directly invoke the Android code which in turn displays the dialog for you. This avoids the
JsDialogHelper
route.