Class FlutterActivity
- java.lang.Object
-
- android.content.Context
-
- android.content.ContextWrapper
-
- android.view.ContextThemeWrapper
-
- android.app.Activity
-
- io.flutter.embedding.android.FlutterActivity
-
- All Implemented Interfaces:
ComponentCallbacks
,ComponentCallbacks2
,KeyEvent.Callback
,LayoutInflater.Factory
,LayoutInflater.Factory2
,View.OnCreateContextMenuListener
,Window.Callback
,androidx.lifecycle.LifecycleOwner
,FlutterEngineConfigurator
,FlutterEngineProvider
,SplashScreenProvider
,PlatformPlugin.PlatformPluginDelegate
public class FlutterActivity extends Activity implements androidx.lifecycle.LifecycleOwner
Activity
which displays a fullscreen Flutter UI.FlutterActivity
is the simplest and most direct way to integrate Flutter within an Android app.FlutterActivity responsibilities
FlutterActivity
maintains the following responsibilities:- Displays an Android launch screen.
- Displays a Flutter splash screen.
- Configures the status bar appearance.
- Chooses the Dart execution app bundle path, entrypoint and entrypoint arguments.
- Chooses Flutter's initial route.
- Renders
Activity
transparently, if desired. - Offers hooks for subclasses to provide and configure a
FlutterEngine
. - Save and restore instance state, see
#shouldRestoreAndSaveState()
;
Dart entrypoint, entrypoint arguments, initial route, and app bundle path
The Dart entrypoint executed within this
Activity
is "main()" by default. To change the entrypoint that aFlutterActivity
executes, subclassFlutterActivity
and overridegetDartEntrypointFunctionName()
. For non-main Dart entrypoints to not be tree-shaken away, you need to annotate those functions with@pragma('vm:entry-point')
in Dart.The Dart entrypoint arguments will be passed as a list of string to Dart's entrypoint function. It can be passed using a
FlutterActivity.NewEngineIntentBuilder
viaFlutterActivity.NewEngineIntentBuilder.dartEntrypointArgs
.The Flutter route that is initially loaded within this
Activity
is "/". The initial route may be specified explicitly by passing the name of the route as aString
inFlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE
, e.g., "my/deep/link".The initial route can each be controlled using a
FlutterActivity.NewEngineIntentBuilder
viaFlutterActivity.NewEngineIntentBuilder.initialRoute
.The app bundle path, Dart entrypoint, Dart entrypoint arguments, and initial route can also be controlled in a subclass of
FlutterActivity
by overriding their respective methods:The Dart entrypoint and app bundle path are not supported as
Intent
parameters since your Dart library entrypoints are your private APIs and Intents are invocable by other processes.Using a cached FlutterEngine
FlutterActivity
can be used with a cachedFlutterEngine
instead of creating a new one. UsewithCachedEngine(String)
to build aFlutterActivity
Intent
that is configured to use an existing, cachedFlutterEngine
.FlutterEngineCache
is the cache that is used to obtain a given cachedFlutterEngine
. You must create and put aFlutterEngine
into theFlutterEngineCache
yourself before using thewithCachedEngine(String)
builder. AnIllegalStateException
will be thrown if a cached engine is requested but does not exist in the cache.When using a cached
FlutterEngine
, thatFlutterEngine
should already be executing Dart code, which means that the Dart entrypoint and initial route have already been defined. Therefore,FlutterActivity.CachedEngineIntentBuilder
does not offer configuration of these properties.It is generally recommended to use a cached
FlutterEngine
to avoid a momentary delay when initializing a newFlutterEngine
. The two exceptions to using a cachedFlutterEngine
are:- When
FlutterActivity
is the firstActivity
displayed by the app, because pre-warming aFlutterEngine
would have no impact in this situation. - When you are unsure when/if you will need to display a Flutter experience.
See https://flutter.dev/docs/development/add-to-app/performance for additional performance explorations on engine loading.
The following illustrates how to pre-warm and cache a
FlutterEngine
:// Create and pre-warm a FlutterEngine. FlutterEngine flutterEngine = new FlutterEngine(context); flutterEngine.getDartExecutor().executeDartEntrypoint(DartEntrypoint.createDefault()); // Cache the pre-warmed FlutterEngine in the FlutterEngineCache. FlutterEngineCache.getInstance().put("my_engine", flutterEngine);
Alternatives to FlutterActivity
If Flutter is needed in a location that cannot use an
Activity
, consider using aFlutterFragment
. Using aFlutterFragment
requires forwarding some calls from anActivity
to theFlutterFragment
.If Flutter is needed in a location that can only use a
View
, consider using aFlutterView
. Using aFlutterView
requires forwarding some calls from anActivity
, as well as forwarding lifecycle calls from anActivity
or aFragment
.Launch Screen and Splash Screen
FlutterActivity
supports the display of an Android "launch screen" as well as a Flutter-specific "splash screen". The launch screen is displayed while the Android application loads. It is only applicable ifFlutterActivity
is the firstActivity
displayed upon loading the app. After the launch screen passes, a splash screen is optionally displayed. The splash screen is displayed for as long as it takes Flutter to initialize and render its first frame.Use Android themes to display a launch screen. Create two themes: a launch theme and a normal theme. In the launch theme, set
windowBackground
to the desiredDrawable
for the launch screen. In the normal theme, setwindowBackground
to any desired background color that should normally appear behind your Flutter content. In most cases this background color will never be seen, but for possible transition edge cases it is a good idea to explicitly replace the launch screen window background with a neutral color.Do not change aspects of system chrome between a launch theme and normal theme. Either define both themes to be fullscreen or not, and define both themes to display the same status bar and navigation bar settings. To adjust system chrome once the Flutter app renders, use platform channels to instruct Android to do so at the appropriate time. This will avoid any jarring visual changes during app startup.
In the AndroidManifest.xml, set the theme of
FlutterActivity
to the defined launch theme. In the metadata section forFlutterActivity
, defined the following reference to your normal theme:<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/YourNormalTheme" />
With themes defined, and AndroidManifest.xml updated, Flutter displays the specified launch screen until the Android application is initialized.
Flutter also requires initialization time. To specify a splash screen for Flutter initialization, subclass
FlutterActivity
and overrideprovideSplashScreen()
. SeeSplashScreen
for details on implementing a splash screen.Flutter ships with a splash screen that automatically displays the exact same
windowBackground
as the launch theme discussed previously. To use that splash screen, include the following metadata in AndroidManifest.xml for thisFlutterActivity
:<meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" />
Alternative Activity
FlutterFragmentActivity
is also available, which is similar toFlutterActivity
but it extendsFragmentActivity
. You should useFlutterActivity
, if possible, but if you need aFragmentActivity
then you should useFlutterFragmentActivity
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FlutterActivity.CachedEngineIntentBuilder
Builder to create anIntent
that launches aFlutterActivity
with an existingFlutterEngine
that is cached inFlutterEngineCache
.static class
FlutterActivity.NewEngineIntentBuilder
Builder to create anIntent
that launches aFlutterActivity
with a newFlutterEngine
and the desired configuration.
-
Field Summary
Fields Modifier and Type Field Description protected io.flutter.embedding.android.FlutterActivityAndFragmentDelegate
delegate
static int
FLUTTER_VIEW_ID
The ID of theFlutterView
created by this activity.-
Fields inherited from class android.app.Activity
DEFAULT_KEYS_DIALER, DEFAULT_KEYS_DISABLE, DEFAULT_KEYS_SEARCH_GLOBAL, DEFAULT_KEYS_SEARCH_LOCAL, DEFAULT_KEYS_SHORTCUT, FOCUSED_STATE_SET, RESULT_CANCELED, RESULT_FIRST_USER, RESULT_OK
-
Fields inherited from class android.content.Context
ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APP_OPS_SERVICE, APP_SEARCH_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_IMPORTANT, BIND_INCLUDE_CAPABILITIES, BIND_NOT_FOREGROUND, BIND_NOT_PERCEPTIBLE, BIND_WAIVE_PRIORITY, BIOMETRIC_SERVICE, BLOB_STORE_SERVICE, BLUETOOTH_SERVICE, BUGREPORT_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CARRIER_CONFIG_SERVICE, CLIPBOARD_SERVICE, COMPANION_DEVICE_SERVICE, CONNECTIVITY_DIAGNOSTICS_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, CROSS_PROFILE_APPS_SERVICE, DEVICE_POLICY_SERVICE, DISPLAY_HASH_SERVICE, DISPLAY_SERVICE, DOMAIN_VERIFICATION_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, EUICC_SERVICE, FILE_INTEGRITY_SERVICE, FINGERPRINT_SERVICE, GAME_SERVICE, HARDWARE_PROPERTIES_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, IPSEC_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCATION_SERVICE, MEDIA_COMMUNICATION_SERVICE, MEDIA_METRICS_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_ROUTER_SERVICE, MEDIA_SESSION_SERVICE, MIDI_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_NO_LOCALIZED_COLLATORS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NETWORK_STATS_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, PEOPLE_SERVICE, PERFORMANCE_HINT_SERVICE, POWER_SERVICE, PRINT_SERVICE, RECEIVER_VISIBLE_TO_INSTANT_APPS, RESTRICTIONS_SERVICE, ROLE_SERVICE, SEARCH_SERVICE, SENSOR_SERVICE, SHORTCUT_SERVICE, STORAGE_SERVICE, STORAGE_STATS_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_IMS_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TEXT_CLASSIFICATION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_INPUT_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_MANAGER_SERVICE, VIBRATOR_SERVICE, VPN_MANAGEMENT_SERVICE, WALLPAPER_SERVICE, WIFI_AWARE_SERVICE, WIFI_P2P_SERVICE, WIFI_RTT_RANGING_SERVICE, WIFI_SERVICE, WINDOW_SERVICE
-
Fields inherited from interface android.content.ComponentCallbacks2
TRIM_MEMORY_BACKGROUND, TRIM_MEMORY_COMPLETE, TRIM_MEMORY_MODERATE, TRIM_MEMORY_RUNNING_CRITICAL, TRIM_MEMORY_RUNNING_LOW, TRIM_MEMORY_RUNNING_MODERATE, TRIM_MEMORY_UI_HIDDEN
-
-
Constructor Summary
Constructors Constructor Description FlutterActivity()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
cleanUpFlutterEngine(FlutterEngine flutterEngine)
Hook for the host to cleanup references that were established inconfigureFlutterEngine(FlutterEngine)
before the host is destroyed or detached.void
configureFlutterEngine(FlutterEngine flutterEngine)
Hook for subclasses to easily configure aFlutterEngine
.static Intent
createDefaultIntent(Context launchContext)
Creates anIntent
that launches aFlutterActivity
, which creates aFlutterEngine
that executes amain()
Dart entrypoint, and displays the "/" route as Flutter's initial route.void
detachFromFlutterEngine()
Activity
getActivity()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain anActivity
reference as needed.String
getAppBundlePath()
A custom path to the bundle that contains this Flutter app's resources, e.g., Dart code snapshots.protected FlutterActivityLaunchConfigs.BackgroundMode
getBackgroundMode()
The desired window background mode of thisActivity
, which defaults toFlutterActivityLaunchConfigs.BackgroundMode.opaque
.String
getCachedEngineId()
Returns the ID of a statically cachedFlutterEngine
to use within thisFlutterActivity
, ornull
if thisFlutterActivity
does not want to use a cachedFlutterEngine
.Context
getContext()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain aContext
reference as needed.List<String>
getDartEntrypointArgs()
The Dart entrypoint arguments will be passed as a list of string to Dart's entrypoint function.String
getDartEntrypointFunctionName()
The Dart entrypoint that will be executed as soon as the Dart snapshot is loaded.String
getDartEntrypointLibraryUri()
The Dart library URI for the entrypoint that will be executed as soon as the Dart snapshot is loaded.ExclusiveAppComponent<Activity>
getExclusiveAppComponent()
Returns the Android App Component exclusively attached toFlutterEngine
.protected FlutterEngine
getFlutterEngine()
Hook for subclasses to obtain a reference to theFlutterEngine
that is owned by thisFlutterActivity
.FlutterShellArgs
getFlutterShellArgs()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain Flutter shell arguments when initializing Flutter.String
getInitialRoute()
The initial route that a Flutter app will render upon loading and executing its Dart code.androidx.lifecycle.Lifecycle
getLifecycle()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain aLifecycle
reference as needed.protected Bundle
getMetaData()
Retrieves the meta data specified in the AndroidManifest.xml.RenderMode
getRenderMode()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain the desiredRenderMode
that should be used when instantiating aFlutterView
.TransparencyMode
getTransparencyMode()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain the desiredTransparencyMode
that should be used when instantiating aFlutterView
.protected void
onActivityResult(int requestCode, int resultCode, Intent data)
void
onBackPressed()
protected void
onCreate(Bundle savedInstanceState)
protected void
onDestroy()
void
onFlutterSurfaceViewCreated(FlutterSurfaceView flutterSurfaceView)
void
onFlutterTextureViewCreated(FlutterTextureView flutterTextureView)
void
onFlutterUiDisplayed()
void
onFlutterUiNoLongerDisplayed()
protected void
onNewIntent(Intent intent)
protected void
onPause()
void
onPostResume()
void
onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
protected void
onResume()
protected void
onSaveInstanceState(Bundle outState)
protected void
onStart()
protected void
onStop()
void
onTrimMemory(int level)
void
onUserLeaveHint()
boolean
popSystemNavigator()
Allow implementer to customize the behavior needed when the Flutter framework calls to pop the Android-side navigation stack.FlutterEngine
provideFlutterEngine(Context context)
Hook for subclasses to easily provide a customFlutterEngine
.PlatformPlugin
providePlatformPlugin(Activity activity, FlutterEngine flutterEngine)
SplashScreen
provideSplashScreen()
Provides aSplashScreen
to display while Flutter initializes and renders its first frame.boolean
shouldAttachEngineToActivity()
Hook for subclasses to control whether or not theFlutterFragment
within thisActivity
automatically attaches itsFlutterEngine
to thisActivity
.boolean
shouldDestroyEngineWithHost()
Returns false if theFlutterEngine
backing thisFlutterActivity
should outlive thisFlutterActivity
, or true to be destroyed when theFlutterActivity
is destroyed.boolean
shouldDispatchAppLifecycleState()
Give the host application a chance to take control of the app lifecycle events.boolean
shouldHandleDeeplinking()
Whether to handle the deeplinking from theIntent
automatically if thegetInitialRoute
returns null.boolean
shouldRestoreAndSaveState()
void
updateSystemUiOverlays()
static FlutterActivity.CachedEngineIntentBuilder
withCachedEngine(String cachedEngineId)
Creates aFlutterActivity.CachedEngineIntentBuilder
, which can be used to configure anIntent
to launch aFlutterActivity
that internally uses an existingFlutterEngine
that is cached inFlutterEngineCache
.static FlutterActivity.NewEngineIntentBuilder
withNewEngine()
Creates anFlutterActivity.NewEngineIntentBuilder
, which can be used to configure anIntent
to launch aFlutterActivity
that internally creates a newFlutterEngine
using the desired Dart entrypoint, initial route, etc.-
Methods inherited from class android.app.Activity
addContentView, attachBaseContext, closeContextMenu, closeOptionsMenu, createPendingResult, dismissDialog, dismissKeyboardShortcutsHelper, dispatchGenericMotionEvent, dispatchKeyEvent, dispatchKeyShortcutEvent, dispatchPopulateAccessibilityEvent, dispatchTouchEvent, dispatchTrackballEvent, dump, enterPictureInPictureMode, enterPictureInPictureMode, findViewById, finish, finishActivity, finishActivityFromChild, finishAffinity, finishAfterTransition, finishAndRemoveTask, finishFromChild, getActionBar, getApplication, getCallingActivity, getCallingPackage, getChangingConfigurations, getComponentName, getContentScene, getContentTransitionManager, getCurrentFocus, getFragmentManager, getIntent, getLastNonConfigurationInstance, getLayoutInflater, getLoaderManager, getLocalClassName, getMaxNumPictureInPictureActions, getMediaController, getMenuInflater, getParent, getParentActivityIntent, getPreferences, getReferrer, getRequestedOrientation, getSearchEvent, getSplashScreen, getSystemService, getTaskId, getTitle, getTitleColor, getVoiceInteractor, getVolumeControlStream, getWindow, getWindowManager, hasWindowFocus, invalidateOptionsMenu, isActivityTransitionRunning, isChangingConfigurations, isChild, isDestroyed, isFinishing, isImmersive, isInMultiWindowMode, isInPictureInPictureMode, isLaunchedFromBubble, isLocalVoiceInteractionSupported, isTaskRoot, isVoiceInteraction, isVoiceInteractionRoot, managedQuery, moveTaskToBack, navigateUpTo, navigateUpToFromChild, onActionModeFinished, onActionModeStarted, onActivityReenter, onApplyThemeResource, onAttachedToWindow, onAttachFragment, onChildTitleChanged, onConfigurationChanged, onContentChanged, onContextItemSelected, onContextMenuClosed, onCreate, onCreateContextMenu, onCreateDescription, onCreateDialog, onCreateDialog, onCreateNavigateUpTaskStack, onCreateOptionsMenu, onCreatePanelMenu, onCreatePanelView, onCreateThumbnail, onCreateView, onCreateView, onDetachedFromWindow, onEnterAnimationComplete, onGenericMotionEvent, onGetDirectActions, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyShortcut, onKeyUp, onLocalVoiceInteractionStarted, onLocalVoiceInteractionStopped, onLowMemory, onMenuItemSelected, onMenuOpened, onMultiWindowModeChanged, onMultiWindowModeChanged, onNavigateUp, onNavigateUpFromChild, onOptionsItemSelected, onOptionsMenuClosed, onPanelClosed, onPerformDirectAction, onPictureInPictureModeChanged, onPictureInPictureModeChanged, onPictureInPictureRequested, onPictureInPictureUiStateChanged, onPostCreate, onPostCreate, onPrepareDialog, onPrepareDialog, onPrepareNavigateUpTaskStack, onPrepareOptionsMenu, onPreparePanel, onProvideAssistContent, onProvideAssistData, onProvideKeyboardShortcuts, onProvideReferrer, onRestart, onRestoreInstanceState, onRestoreInstanceState, onRetainNonConfigurationInstance, onSaveInstanceState, onSearchRequested, onSearchRequested, onStateNotSaved, onTitleChanged, onTopResumedActivityChanged, onTouchEvent, onTrackballEvent, onUserInteraction, onVisibleBehindCanceled, onWindowAttributesChanged, onWindowFocusChanged, onWindowStartingActionMode, onWindowStartingActionMode, openContextMenu, openOptionsMenu, overridePendingTransition, postponeEnterTransition, recreate, registerActivityLifecycleCallbacks, registerForContextMenu, releaseInstance, removeDialog, reportFullyDrawn, requestDragAndDropPermissions, requestPermissions, requestShowKeyboardShortcuts, requestVisibleBehind, requestWindowFeature, requireViewById, runOnUiThread, setActionBar, setContentTransitionManager, setContentView, setContentView, setContentView, setDefaultKeyMode, setEnterSharedElementCallback, setExitSharedElementCallback, setFeatureDrawable, setFeatureDrawableAlpha, setFeatureDrawableResource, setFeatureDrawableUri, setFinishOnTouchOutside, setImmersive, setInheritShowWhenLocked, setIntent, setLocusContext, setMediaController, setPictureInPictureParams, setProgress, setProgressBarIndeterminate, setProgressBarIndeterminateVisibility, setProgressBarVisibility, setRequestedOrientation, setResult, setResult, setSecondaryProgress, setShowWhenLocked, setTaskDescription, setTheme, setTitle, setTitle, setTitleColor, setTranslucent, setTurnScreenOn, setVisible, setVolumeControlStream, setVrModeEnabled, shouldShowRequestPermissionRationale, shouldUpRecreateTask, showAssist, showDialog, showDialog, showLockTaskEscapeMessage, startActionMode, startActionMode, startActivities, startActivities, startActivity, startActivity, startActivityForResult, startActivityForResult, startActivityFromChild, startActivityFromChild, startActivityFromFragment, startActivityFromFragment, startActivityIfNeeded, startActivityIfNeeded, startIntentSender, startIntentSender, startIntentSenderForResult, startIntentSenderForResult, startIntentSenderFromChild, startIntentSenderFromChild, startLocalVoiceInteraction, startLockTask, startManagingCursor, startNextMatchingActivity, startNextMatchingActivity, startPostponedEnterTransition, startSearch, stopLocalVoiceInteraction, stopLockTask, stopManagingCursor, takeKeyEvents, triggerSearch, unregisterActivityLifecycleCallbacks, unregisterForContextMenu
-
Methods inherited from class android.view.ContextThemeWrapper
applyOverrideConfiguration, getAssets, getResources, getTheme, setTheme
-
Methods inherited from class android.content.ContextWrapper
bindIsolatedService, bindService, bindService, bindServiceAsUser, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingOrSelfUriPermissions, checkCallingPermission, checkCallingUriPermission, checkCallingUriPermissions, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, checkUriPermissions, clearWallpaper, createAttributionContext, createConfigurationContext, createContext, createContextForSplit, createDeviceProtectedStorageContext, createDisplayContext, createPackageContext, createWindowContext, createWindowContext, databaseList, deleteDatabase, deleteFile, deleteSharedPreferences, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAttributionSource, getAttributionTag, getBaseContext, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDataDir, getDir, getDisplay, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainExecutor, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getOpPackageName, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getParams, getSharedPreferences, getSystemServiceName, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isDeviceProtectedStorage, isRestricted, isUiContext, moveDatabaseFrom, moveSharedPreferencesFrom, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerReceiver, registerReceiver, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeUriPermission, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setWallpaper, setWallpaper, startForegroundService, startInstrumentation, startService, stopService, unbindService, unregisterReceiver, updateServiceGroup
-
Methods inherited from class android.content.Context
getColor, getColorStateList, getDrawable, getString, getString, getSystemService, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, registerComponentCallbacks, sendBroadcastWithMultiplePermissions, unregisterComponentCallbacks
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface android.view.Window.Callback
onPointerCaptureChanged
-
-
-
-
Field Detail
-
FLUTTER_VIEW_ID
public static final int FLUTTER_VIEW_ID
The ID of theFlutterView
created by this activity.This ID can be used to lookup
FlutterView
in the Android view hierarchy. For more, seeView.findViewById(int)
.
-
delegate
protected io.flutter.embedding.android.FlutterActivityAndFragmentDelegate delegate
-
-
Method Detail
-
createDefaultIntent
@NonNull public static Intent createDefaultIntent(@NonNull Context launchContext)
Creates anIntent
that launches aFlutterActivity
, which creates aFlutterEngine
that executes amain()
Dart entrypoint, and displays the "/" route as Flutter's initial route.Consider using the
withCachedEngine(String)
Intent
builder to control when theFlutterEngine
should be created in your application.- Parameters:
launchContext
- The launch context. e.g. An Activity.- Returns:
- The default intent.
-
withNewEngine
@NonNull public static FlutterActivity.NewEngineIntentBuilder withNewEngine()
Creates anFlutterActivity.NewEngineIntentBuilder
, which can be used to configure anIntent
to launch aFlutterActivity
that internally creates a newFlutterEngine
using the desired Dart entrypoint, initial route, etc.- Returns:
- The engine intent builder.
-
withCachedEngine
public static FlutterActivity.CachedEngineIntentBuilder withCachedEngine(@NonNull String cachedEngineId)
Creates aFlutterActivity.CachedEngineIntentBuilder
, which can be used to configure anIntent
to launch aFlutterActivity
that internally uses an existingFlutterEngine
that is cached inFlutterEngineCache
.- Parameters:
cachedEngineId
- A cached engine ID.- Returns:
- The builder.
-
getExclusiveAppComponent
public ExclusiveAppComponent<Activity> getExclusiveAppComponent()
Returns the Android App Component exclusively attached toFlutterEngine
.
-
onCreate
protected void onCreate(@Nullable Bundle savedInstanceState)
-
provideSplashScreen
@Nullable public SplashScreen provideSplashScreen()
Description copied from interface:SplashScreenProvider
Provides aSplashScreen
to display while Flutter initializes and renders its first frame.- Specified by:
provideSplashScreen
in interfaceSplashScreenProvider
- Returns:
- The splash screen.
-
onPostResume
public void onPostResume()
- Overrides:
onPostResume
in classActivity
-
onSaveInstanceState
protected void onSaveInstanceState(Bundle outState)
- Overrides:
onSaveInstanceState
in classActivity
-
detachFromFlutterEngine
public void detachFromFlutterEngine()
-
onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data)
- Overrides:
onActivityResult
in classActivity
-
onNewIntent
protected void onNewIntent(@NonNull Intent intent)
- Overrides:
onNewIntent
in classActivity
-
onBackPressed
public void onBackPressed()
- Overrides:
onBackPressed
in classActivity
-
onRequestPermissionsResult
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
- Overrides:
onRequestPermissionsResult
in classActivity
-
onUserLeaveHint
public void onUserLeaveHint()
- Overrides:
onUserLeaveHint
in classActivity
-
onTrimMemory
public void onTrimMemory(int level)
- Specified by:
onTrimMemory
in interfaceComponentCallbacks2
- Overrides:
onTrimMemory
in classActivity
-
getContext
@NonNull public Context getContext()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain aContext
reference as needed.
-
getActivity
@NonNull public Activity getActivity()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain anActivity
reference as needed. This reference is used by the delegate to instantiate aFlutterView
, aPlatformPlugin
, and to determine if theActivity
is changing configurations.
-
getLifecycle
@NonNull public androidx.lifecycle.Lifecycle getLifecycle()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain aLifecycle
reference as needed. This reference is used by the delegate to provide Flutter plugins with access to lifecycle events.- Specified by:
getLifecycle
in interfaceandroidx.lifecycle.LifecycleOwner
-
getFlutterShellArgs
@NonNull public FlutterShellArgs getFlutterShellArgs()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain Flutter shell arguments when initializing Flutter.
-
getCachedEngineId
@Nullable public String getCachedEngineId()
Returns the ID of a statically cachedFlutterEngine
to use within thisFlutterActivity
, ornull
if thisFlutterActivity
does not want to use a cachedFlutterEngine
.
-
shouldDestroyEngineWithHost
public boolean shouldDestroyEngineWithHost()
Returns false if theFlutterEngine
backing thisFlutterActivity
should outlive thisFlutterActivity
, or true to be destroyed when theFlutterActivity
is destroyed.The default value is
true
in cases whereFlutterActivity
created its ownFlutterEngine
, andfalse
in cases where a cachedFlutterEngine
was provided.
-
getDartEntrypointFunctionName
@NonNull public String getDartEntrypointFunctionName()
The Dart entrypoint that will be executed as soon as the Dart snapshot is loaded.This preference can be controlled by setting a
<meta-data>
calledFlutterActivityLaunchConfigs.DART_ENTRYPOINT_META_DATA_KEY
within the Android manifest definition for thisFlutterActivity
.Subclasses may override this method to directly control the Dart entrypoint.
-
getDartEntrypointArgs
@Nullable public List<String> getDartEntrypointArgs()
The Dart entrypoint arguments will be passed as a list of string to Dart's entrypoint function.A value of null means do not pass any arguments to Dart's entrypoint function.
Subclasses may override this method to directly control the Dart entrypoint arguments.
-
getDartEntrypointLibraryUri
@Nullable public String getDartEntrypointLibraryUri()
The Dart library URI for the entrypoint that will be executed as soon as the Dart snapshot is loaded.Example value: "package:foo/bar.dart"
This preference can be controlled by setting a
<meta-data>
calledFlutterActivityLaunchConfigs.DART_ENTRYPOINT_URI_META_DATA_KEY
within the Android manifest definition for thisFlutterActivity
.A value of null means use the default root library.
Subclasses may override this method to directly control the Dart entrypoint uri.
-
getInitialRoute
public String getInitialRoute()
The initial route that a Flutter app will render upon loading and executing its Dart code.This preference can be controlled with 2 methods:
- Pass a boolean as
FlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE
with the launchingIntent
, or - Set a
<meta-data>
calledFlutterActivityLaunchConfigs.INITIAL_ROUTE_META_DATA_KEY
for thisActivity
in the Android manifest.
Intent
preference takes priority.The reason that a
<meta-data>
preference is supported is because thisActivity
might be the very firstActivity
launched, which means the developer won't have control over the incomingIntent
.Subclasses may override this method to directly control the initial route.
If this method returns null and the
shouldHandleDeeplinking
returns true, the initial route is derived from theIntent
through the Intent.getData() instead. - Pass a boolean as
-
getAppBundlePath
@NonNull public String getAppBundlePath()
A custom path to the bundle that contains this Flutter app's resources, e.g., Dart code snapshots.When this
FlutterActivity
is run by Flutter tooling and a data String is included in the launchingIntent
, that data String is interpreted as an app bundle path.When otherwise unspecified, the value is null, which defaults to the app bundle path defined in
FlutterLoader.findAppBundlePath()
.Subclasses may override this method to return a custom app bundle path.
-
getRenderMode
@NonNull public RenderMode getRenderMode()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain the desiredRenderMode
that should be used when instantiating aFlutterView
.
-
getTransparencyMode
@NonNull public TransparencyMode getTransparencyMode()
FlutterActivityAndFragmentDelegate.Host
method that is used byFlutterActivityAndFragmentDelegate
to obtain the desiredTransparencyMode
that should be used when instantiating aFlutterView
.
-
getBackgroundMode
@NonNull protected FlutterActivityLaunchConfigs.BackgroundMode getBackgroundMode()
The desired window background mode of thisActivity
, which defaults toFlutterActivityLaunchConfigs.BackgroundMode.opaque
.- Returns:
- The background mode.
-
provideFlutterEngine
@Nullable public FlutterEngine provideFlutterEngine(@NonNull Context context)
Hook for subclasses to easily provide a customFlutterEngine
.This hook is where a cached
FlutterEngine
should be provided, if a cachedFlutterEngine
is desired.- Specified by:
provideFlutterEngine
in interfaceFlutterEngineProvider
- Parameters:
context
- The current context. e.g. An activity.- Returns:
- The Flutter engine.
-
getFlutterEngine
@Nullable protected FlutterEngine getFlutterEngine()
Hook for subclasses to obtain a reference to theFlutterEngine
that is owned by thisFlutterActivity
.- Returns:
- The Flutter engine.
-
getMetaData
@Nullable protected Bundle getMetaData() throws PackageManager.NameNotFoundException
Retrieves the meta data specified in the AndroidManifest.xml.- Returns:
- The meta data.
- Throws:
PackageManager.NameNotFoundException
- if a package with the given name cannot be found on the system.
-
providePlatformPlugin
@Nullable public PlatformPlugin providePlatformPlugin(@Nullable Activity activity, @NonNull FlutterEngine flutterEngine)
-
configureFlutterEngine
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine)
Hook for subclasses to easily configure aFlutterEngine
.This method is called after
provideFlutterEngine(Context)
.All plugins listed in the app's pubspec are registered in the base implementation of this method unless the FlutterEngine for this activity was externally created. To avoid the automatic plugin registration for implicitly created FlutterEngines, override this method without invoking super(). To keep automatic plugin registration and further configure the FlutterEngine, override this method, invoke super(), and then configure the FlutterEngine as desired.
- Specified by:
configureFlutterEngine
in interfaceFlutterEngineConfigurator
- Parameters:
flutterEngine
- The Flutter engine.
-
cleanUpFlutterEngine
public void cleanUpFlutterEngine(@NonNull FlutterEngine flutterEngine)
Hook for the host to cleanup references that were established inconfigureFlutterEngine(FlutterEngine)
before the host is destroyed or detached.This method is called in
onDestroy()
.- Specified by:
cleanUpFlutterEngine
in interfaceFlutterEngineConfigurator
- Parameters:
flutterEngine
- The Flutter engine.
-
shouldAttachEngineToActivity
public boolean shouldAttachEngineToActivity()
Hook for subclasses to control whether or not theFlutterFragment
within thisActivity
automatically attaches itsFlutterEngine
to thisActivity
.This property is controlled with a protected method instead of an
Intent
argument because the only situation where changing this value would help, is a situation in whichFlutterActivity
is being subclassed to utilize a custom and/or cachedFlutterEngine
.Defaults to
true
.Control surfaces are used to provide Android resources and lifecycle events to plugins that are attached to the
FlutterEngine
. IfshouldAttachEngineToActivity
is true, then thisFlutterActivity
will connect itsFlutterEngine
to itself, along with any plugins that are registered with thatFlutterEngine
. This allows plugins to access theActivity
, as well as receiveActivity
-specific calls, e.g.Activity.onNewIntent(Intent)
. IfshouldAttachEngineToActivity
is false, then thisFlutterActivity
will not automatically manage the connection between itsFlutterEngine
and itself. In this case, plugins will not be offered a reference to anActivity
or its OS hooks.Returning false from this method does not preclude a
FlutterEngine
from being attaching to aFlutterActivity
- it just prevents the attachment from happening automatically. A developer can choose to subclassFlutterActivity
and then invokeActivityControlSurface.attachToActivity(ExclusiveAppComponent, Lifecycle)
andActivityControlSurface.detachFromActivity()
at the desired times.One reason that a developer might choose to manually manage the relationship between the
Activity
andFlutterEngine
is if the developer wants to move theFlutterEngine
somewhere else. For example, a developer might want theFlutterEngine
to outlive thisFlutterActivity
so that it can be used later in a differentActivity
. To accomplish this, theFlutterEngine
may need to be disconnected from thisFlutterActivity
at an unusual time, preventing thisFlutterActivity
from correctly managing the relationship between theFlutterEngine
and itself.
-
shouldHandleDeeplinking
public boolean shouldHandleDeeplinking()
Whether to handle the deeplinking from theIntent
automatically if thegetInitialRoute
returns null.The default implementation looks
<meta-data>
calledFlutterActivityLaunchConfigs.HANDLE_DEEPLINKING_META_DATA_KEY
within the Android manifest definition for thisFlutterActivity
.
-
onFlutterSurfaceViewCreated
public void onFlutterSurfaceViewCreated(@NonNull FlutterSurfaceView flutterSurfaceView)
-
onFlutterTextureViewCreated
public void onFlutterTextureViewCreated(@NonNull FlutterTextureView flutterTextureView)
-
onFlutterUiDisplayed
public void onFlutterUiDisplayed()
-
onFlutterUiNoLongerDisplayed
public void onFlutterUiNoLongerDisplayed()
-
shouldRestoreAndSaveState
public boolean shouldRestoreAndSaveState()
-
shouldDispatchAppLifecycleState
public boolean shouldDispatchAppLifecycleState()
Give the host application a chance to take control of the app lifecycle events.Return
false
means the host application dispatches these app lifecycle events, while returntrue
means the engine dispatches these events.Defaults to
true
.
-
popSystemNavigator
public boolean popSystemNavigator()
Description copied from interface:PlatformPlugin.PlatformPluginDelegate
Allow implementer to customize the behavior needed when the Flutter framework calls to pop the Android-side navigation stack.- Specified by:
popSystemNavigator
in interfacePlatformPlugin.PlatformPluginDelegate
- Returns:
- true if the implementation consumed the pop signal. If false, a default behavior of
finishing the activity or sending the signal to
OnBackPressedDispatcher
will be executed.
-
updateSystemUiOverlays
public void updateSystemUiOverlays()
-
-