Search code examples
androidandroid-activityandroid-intent

How can I start an Activity from a non-Activity class?


I have a map view activity that shows a few OverlayItems. In the onTap method of an overlay, I want to trigger a new activity that shows this overlay photo as a fullscreen, for example.

When I do this inside my overlay class:

Intent intent = new Intent();
intent.setClass(getApplicationContext, FullscreenView.class);
startActivity(intent);

.. it can't find an application context, as I am not in the scope of an activity.

When I add a method to my main activity, let's say startFullscreen:

public static void startFullscreen() {
    if (sCurrentPhoto != null) {
        Intent intent = new Intent();
        intent.setClass(getApplicationContext(), FullscreenView.class);
        startActivity(intent);          
    }
}

I can not call getApplicationContext() and startActivity(), because I am in a static context. I need the static method however to call it in the Overlay class like MainView.startFullscreen().

Put simply: How can I start an Activity from a non-Activity class?


Solution

  • Your onTap override receives the MapView from which you can obtain the Context:

    @Override
    public boolean onTap(GeoPoint p, MapView mapView)
    {
        // ...
    
        Intent intent = new Intent();
        intent.setClass(mapView.getContext(), FullscreenView.class);
        startActivity(intent);
    
        // ...
    }