Class FlutterActivity
- All Implemented Interfaces:
ComponentCallbacks,ComponentCallbacks2,KeyEvent.Callback,LayoutInflater.Factory,LayoutInflater.Factory2,View.OnCreateContextMenuListener,Window.Callback,androidx.lifecycle.LifecycleOwner,FlutterEngineConfigurator,FlutterEngineProvider,PlatformPlugin.PlatformPluginDelegate
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.
- Configures the status bar appearance.
- Chooses the Dart execution app bundle path, entrypoint and entrypoint arguments.
- Chooses Flutter's initial route.
- Renders
Activitytransparently, 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 a FlutterActivity executes, subclass FlutterActivity and
override getDartEntrypointFunctionName(). 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 via FlutterActivity.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 a String in FlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE, e.g., "my/deep/link".
The initial route can each be controlled using a FlutterActivity.NewEngineIntentBuilder via FlutterActivity.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 cached FlutterEngine instead of creating a new one. Use withCachedEngine(String) to build a FlutterActivity Intent that is configured
to use an existing, cached FlutterEngine. FlutterEngineCache is the cache that is used to obtain a given
cached FlutterEngine. You must create and put a FlutterEngine into the FlutterEngineCache yourself before using the withCachedEngine(String) builder. An IllegalStateException will be thrown if a cached
engine is requested but does not exist in the cache.
When using a cached FlutterEngine, that FlutterEngine 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 new FlutterEngine. The two exceptions to using a cached FlutterEngine are:
- When
FlutterActivityis the firstActivitydisplayed by the app, because pre-warming aFlutterEnginewould have no impact in this situation. - When you are unsure when/if you will need to display a Flutter experience.
See https://docs.flutter.cn/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.
FlutterEngineGroup group = new FlutterEngineGroup(context);
FlutterEngine flutterEngine = group.createAndRunDefaultEngine(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 a
FlutterFragment. Using a FlutterFragment requires forwarding some calls from an
Activity to the FlutterFragment.
If Flutter is needed in a location that can only use a View, consider using a FlutterView. Using a FlutterView requires forwarding some calls from an
Activity, as well as forwarding lifecycle calls from an Activity or a Fragment.
Launch Screen
FlutterActivity supports the display of an Android "launch screen", which is displayed
while the Android application loads. It is only applicable if FlutterActivity is the
first Activity displayed upon loading the app.
Prior to Flutter 2.5, FlutterActivity supported the display of a Flutter-specific
"splash screen" that would be displayed after the launch screen passes. This has since been
deprecated. If a launch screen is specified, it will automatically persist 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 desired Drawable for the
launch screen. In the normal theme, set windowBackground 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 for FlutterActivity, 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.
Alternative Activity FlutterFragmentActivity is also available, which
is similar to FlutterActivity but it extends FragmentActivity. You should use
FlutterActivity, if possible, but if you need a FragmentActivity then you should
use FlutterFragmentActivity.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder to create anIntentthat launches aFlutterActivitywith an existingFlutterEnginethat is cached inFlutterEngineCache.static classBuilder to create anIntentthat launches aFlutterActivitywith a newFlutterEnginecreated by FlutterEngineGroup#createAndRunEngine.static classBuilder to create anIntentthat launches aFlutterActivitywith a newFlutterEngineand the desired configuration.Nested classes/interfaces inherited from class android.app.Activity
Activity.ScreenCaptureCallbackNested classes/interfaces inherited from class android.content.Context
Context.BindServiceFlags -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected io.flutter.embedding.android.FlutterActivityAndFragmentDelegatestatic final intThe ID of theFlutterViewcreated 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, FULLSCREEN_MODE_REQUEST_ENTER, FULLSCREEN_MODE_REQUEST_EXIT, OVERRIDE_TRANSITION_CLOSE, OVERRIDE_TRANSITION_OPEN, RESULT_CANCELED, RESULT_FIRST_USER, RESULT_OKFields inherited from class android.content.Context
ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ADVANCED_PROTECTION_SERVICE, ALARM_SERVICE, APP_FUNCTION_SERVICE, APP_OPS_SERVICE, APP_SEARCH_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_ACTIVITY_STARTS, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_EXTERNAL_SERVICE_LONG, BIND_IMPORTANT, BIND_INCLUDE_CAPABILITIES, BIND_NOT_FOREGROUND, BIND_NOT_PERCEPTIBLE, BIND_PACKAGE_ISOLATED_PROCESS, BIND_SHARED_ISOLATED_PROCESS, 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, CONTACT_KEYS_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, CREDENTIAL_SERVICE, CROSS_PROFILE_APPS_SERVICE, DEVICE_ID_DEFAULT, DEVICE_ID_INVALID, DEVICE_LOCK_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, GRAMMATICAL_INFLECTION_SERVICE, HARDWARE_PROPERTIES_SERVICE, HEALTHCONNECT_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, IPSEC_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, KEYSTORE_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCALE_SERVICE, LOCATION_SERVICE, MEDIA_COMMUNICATION_SERVICE, MEDIA_METRICS_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_QUALITY_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, OVERLAY_SERVICE, PEOPLE_SERVICE, PERFORMANCE_HINT_SERVICE, PERSISTENT_DATA_BLOCK_SERVICE, POWER_SERVICE, PRINT_SERVICE, PROFILING_SERVICE, RECEIVER_EXPORTED, RECEIVER_NOT_EXPORTED, RECEIVER_VISIBLE_TO_INSTANT_APPS, RESTRICTIONS_SERVICE, ROLE_SERVICE, SATELLITE_SERVICE, SEARCH_SERVICE, SECURITY_STATE_SERVICE, SENSOR_SERVICE, SHORTCUT_SERVICE, STATUS_BAR_SERVICE, STORAGE_SERVICE, STORAGE_STATS_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_IMS_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TETHERING_SERVICE, TEXT_CLASSIFICATION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_AD_SERVICE, TV_INPUT_SERVICE, TV_INTERACTIVE_APP_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_MANAGER_SERVICE, VIBRATOR_SERVICE, VIRTUAL_DEVICE_SERVICE, VPN_MANAGEMENT_SERVICE, WALLPAPER_SERVICE, WIFI_AWARE_SERVICE, WIFI_P2P_SERVICE, WIFI_RTT_RANGING_SERVICE, WIFI_SERVICE, WINDOW_SERVICEFields 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 -
Method Summary
Modifier and TypeMethodDescriptionbooleanWhether to automatically attach theFlutterViewto the engine.voidvoidcleanUpFlutterEngine(FlutterEngine flutterEngine) Hook for the host to cleanup references that were established inconfigureFlutterEngine(FlutterEngine)before the host is destroyed or detached.voidvoidconfigureFlutterEngine(FlutterEngine flutterEngine) Hook for subclasses to easily configure aFlutterEngine.static IntentcreateDefaultIntent(Context launchContext) Creates anIntentthat launches aFlutterActivity, which creates aFlutterEnginethat executes amain()Dart entrypoint, and displays the "/" route as Flutter's initial route.voidFlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain anActivityreference as needed.A custom path to the bundle that contains this Flutter app's resources, e.g., Dart code snapshots.booleanThe desired window background mode of thisActivity, which defaults toFlutterActivityLaunchConfigs.BackgroundMode.opaque.Returns the ID of a statically cachedFlutterEngineGroupto use within thisFlutterActivity, ornullif thisFlutterActivitydoes not want to use a cachedFlutterEngineGroup.Returns the ID of a statically cachedFlutterEngineto use within thisFlutterActivity, ornullif thisFlutterActivitydoes not want to use a cachedFlutterEngine.FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain aContextreference as needed.The Dart entrypoint arguments will be passed as a list of string to Dart's entrypoint function.The Dart entrypoint that will be executed as soon as the Dart snapshot is loaded.The Dart library URI for the entrypoint that will be executed as soon as the Dart snapshot is loaded.Returns the Android App Component exclusively attached toFlutterEngine.protected FlutterEngineHook for subclasses to obtain a reference to theFlutterEnginethat is owned by thisFlutterActivity.FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain Flutter shell arguments when initializing Flutter.The initial route that a Flutter app will render upon loading and executing its Dart code.androidx.lifecycle.LifecycleFlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain aLifecyclereference as needed.protected BundleRetrieves the meta data specified in the AndroidManifest.xml.protected OnBackInvokedCallbackFlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain the desiredRenderModethat should be used when instantiating aFlutterView.FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain the desiredTransparencyModethat should be used when instantiating aFlutterView.protected voidonActivityResult(int requestCode, int resultCode, Intent data) voidprotected voidprotected voidvoidonFlutterSurfaceViewCreated(FlutterSurfaceView flutterSurfaceView) voidonFlutterTextureViewCreated(FlutterTextureView flutterTextureView) voidvoidprotected voidonNewIntent(Intent intent) protected voidonPause()voidvoidonRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) protected voidonResume()protected voidonSaveInstanceState(Bundle outState) protected voidonStart()protected voidonStop()voidonTrimMemory(int level) voidvoidonWindowFocusChanged(boolean hasFocus) booleanAllow implementer to customize the behavior needed when the Flutter framework calls to pop the Android-side navigation stack.provideFlutterEngine(Context context) Hook for subclasses to easily provide a customFlutterEngine.providePlatformPlugin(Activity activity, FlutterEngine flutterEngine) io.flutter.plugin.view.SensitiveContentPluginprovideSensitiveContentPlugin(Activity activity, FlutterEngine flutterEngine) voidRegisters the callback with OnBackInvokedDispatcher to capture back navigation gestures and pass them to the framework.voidrelease()Irreversibly release this activity's control of theFlutterEngineand its subcomponents.voidsetFrameworkHandlesBack(boolean frameworkHandlesBack) The Flutter application would or would not like to handle navigation pop events itself.booleanHook for subclasses to control whether or not theFlutterFragmentwithin thisActivityautomatically attaches itsFlutterEngineto thisActivity.booleanReturns false if theFlutterEnginebacking thisFlutterActivityshould outlive thisFlutterActivity, or true to be destroyed when theFlutterActivityis destroyed.booleanGive the host application a chance to take control of the app lifecycle events.booleanWhether to handle the deeplinking from theIntentautomatically if thegetInitialRoutereturns null.booleanvoidstartBackGesture(BackEvent backEvent) voidUnregisters the callback from OnBackInvokedDispatcher.voidupdateBackGestureProgress(BackEvent backEvent) voidwithCachedEngine(String cachedEngineId) Creates aFlutterActivity.CachedEngineIntentBuilder, which can be used to configure anIntentto launch aFlutterActivitythat internally uses an existingFlutterEnginethat is cached inFlutterEngineCache.Creates anFlutterActivity.NewEngineIntentBuilder, which can be used to configure anIntentto launch aFlutterActivitythat internally creates a newFlutterEngineusing the desired Dart entrypoint, initial route, etc.withNewEngineInGroup(String engineGroupId) Creates aFlutterActivity.NewEngineInGroupIntentBuilder, which can be used to configure anIntentto launch aFlutterActivityby internally creating a FlutterEngine from an existingFlutterEngineGroupcached in a specifiedFlutterEngineGroupCache.Methods inherited from class android.app.Activity
addContentView, attachBaseContext, clearOverrideActivityTransition, closeContextMenu, closeOptionsMenu, createPendingResult, dismissDialog, dismissKeyboardShortcutsHelper, dispatchGenericMotionEvent, dispatchKeyEvent, dispatchKeyShortcutEvent, dispatchPopulateAccessibilityEvent, dispatchTouchEvent, dispatchTrackballEvent, dump, enterPictureInPictureMode, enterPictureInPictureMode, findViewById, finish, finishActivity, finishActivityFromChild, finishAffinity, finishAfterTransition, finishAndRemoveTask, finishFromChild, getActionBar, getApplication, getCaller, getCallingActivity, getCallingPackage, getChangingConfigurations, getComponentName, getContentScene, getContentTransitionManager, getCurrentCaller, getCurrentFocus, getFragmentManager, getInitialCaller, getIntent, getLastNonConfigurationInstance, getLaunchedFromPackage, getLaunchedFromUid, getLayoutInflater, getLoaderManager, getLocalClassName, getMaxNumPictureInPictureActions, getMediaController, getMenuInflater, getOnBackInvokedDispatcher, 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, onActivityResult, 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, onNewIntent, onOptionsItemSelected, onOptionsMenuClosed, onPanelClosed, onPerformDirectAction, onPictureInPictureModeChanged, onPictureInPictureModeChanged, onPictureInPictureRequested, onPictureInPictureUiStateChanged, onPostCreate, onPostCreate, onPrepareDialog, onPrepareDialog, onPrepareNavigateUpTaskStack, onPrepareOptionsMenu, onPreparePanel, onProvideAssistContent, onProvideAssistData, onProvideKeyboardShortcuts, onProvideReferrer, onRequestPermissionsResult, onRestart, onRestoreInstanceState, onRestoreInstanceState, onRetainNonConfigurationInstance, onSaveInstanceState, onSearchRequested, onSearchRequested, onStateNotSaved, onTitleChanged, onTopResumedActivityChanged, onTouchEvent, onTrackballEvent, onUserInteraction, onVisibleBehindCanceled, onWindowAttributesChanged, onWindowStartingActionMode, onWindowStartingActionMode, openContextMenu, openOptionsMenu, overrideActivityTransition, overrideActivityTransition, overridePendingTransition, overridePendingTransition, postponeEnterTransition, recreate, registerActivityLifecycleCallbacks, registerComponentCallbacks, registerForContextMenu, registerScreenCaptureCallback, releaseInstance, removeDialog, reportFullyDrawn, requestDragAndDropPermissions, requestFullscreenMode, requestOpenInBrowserEducation, requestPermissions, requestPermissions, requestShowKeyboardShortcuts, requestVisibleBehind, requestWindowFeature, requireViewById, runOnUiThread, setActionBar, setAllowCrossUidActivitySwitchFromBelow, setContentTransitionManager, setContentView, setContentView, setContentView, setDefaultKeyMode, setEnterSharedElementCallback, setExitSharedElementCallback, setFeatureDrawable, setFeatureDrawableAlpha, setFeatureDrawableResource, setFeatureDrawableUri, setFinishOnTouchOutside, setImmersive, setInheritShowWhenLocked, setIntent, setIntent, setLocusContext, setMediaController, setPictureInPictureParams, setProgress, setProgressBarIndeterminate, setProgressBarIndeterminateVisibility, setProgressBarVisibility, setRecentsScreenshotEnabled, setRequestedOrientation, setResult, setResult, setSecondaryProgress, setShouldDockBigOverlays, setShowWhenLocked, setTaskDescription, setTheme, setTitle, setTitle, setTitleColor, setTranslucent, setTurnScreenOn, setVisible, setVolumeControlStream, setVrModeEnabled, shouldDockBigOverlays, shouldShowRequestPermissionRationale, 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, unregisterComponentCallbacks, unregisterForContextMenu, unregisterScreenCaptureCallbackMethods inherited from class android.view.ContextThemeWrapper
applyOverrideConfiguration, getAssets, getResources, getTheme, setThemeMethods inherited from class android.content.ContextWrapper
bindIsolatedService, bindService, bindService, bindService, bindService, bindServiceAsUser, bindServiceAsUser, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingOrSelfUriPermissions, checkCallingPermission, checkCallingUriPermission, checkCallingUriPermissions, checkContentUriPermissionFull, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, checkUriPermissions, clearWallpaper, createAttributionContext, createConfigurationContext, createContext, createContextForSplit, createDeviceContext, 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, getDeviceId, 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, registerDeviceIdChangeListener, registerReceiver, registerReceiver, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeSelfPermissionsOnKill, revokeUriPermission, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setWallpaper, setWallpaper, startForegroundService, startInstrumentation, startService, stopService, unbindService, unregisterDeviceIdChangeListener, unregisterReceiver, updateServiceGroupMethods inherited from class android.content.Context
bindIsolatedService, getColor, getColorStateList, getDrawable, getString, getString, getSystemService, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, revokeSelfPermissionOnKill, sendBroadcastWithMultiplePermissionsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface android.view.Window.Callback
onPointerCaptureChanged
-
Field Details
-
FLUTTER_VIEW_ID
public static final int FLUTTER_VIEW_IDThe ID of theFlutterViewcreated by this activity.This ID can be used to lookup
FlutterViewin the Android view hierarchy. For more, seeView.findViewById(int). -
delegate
@VisibleForTesting protected io.flutter.embedding.android.FlutterActivityAndFragmentDelegate delegate
-
-
Constructor Details
-
FlutterActivity
public FlutterActivity()
-
-
Method Details
-
createDefaultIntent
Creates anIntentthat launches aFlutterActivity, which creates aFlutterEnginethat executes amain()Dart entrypoint, and displays the "/" route as Flutter's initial route.Consider using the
withCachedEngine(String)Intentbuilder to control when theFlutterEngineshould be created in your application.- Parameters:
launchContext- The launch context. e.g. An Activity.- Returns:
- The default intent.
-
withNewEngine
Creates anFlutterActivity.NewEngineIntentBuilder, which can be used to configure anIntentto launch aFlutterActivitythat internally creates a newFlutterEngineusing 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 anIntentto launch aFlutterActivitythat internally uses an existingFlutterEnginethat is cached inFlutterEngineCache.- Parameters:
cachedEngineId- A cached engine ID.- Returns:
- The builder.
-
withNewEngineInGroup
public static FlutterActivity.NewEngineInGroupIntentBuilder withNewEngineInGroup(@NonNull String engineGroupId) Creates aFlutterActivity.NewEngineInGroupIntentBuilder, which can be used to configure anIntentto launch aFlutterActivityby internally creating a FlutterEngine from an existingFlutterEngineGroupcached in a specifiedFlutterEngineGroupCache.// Create a FlutterEngineGroup, such as in the onCreate method of the Application. FlutterEngineGroup engineGroup = new FlutterEngineGroup(this); FlutterEngineGroupCache.getInstance().put("my_cached_engine_group_id", engineGroup); // Start a FlutterActivity with the FlutterEngineGroup by creating an intent with withNewEngineInGroup Intent intent = FlutterActivity.withNewEngineInGroup("my_cached_engine_group_id") .dartEntrypoint("custom_entrypoint") .initialRoute("/custom/route") .backgroundMode(BackgroundMode.transparent) .build(context); startActivity(intent);- Parameters:
engineGroupId- A cached engine group ID.- Returns:
- The builder.
-
getExclusiveAppComponent
Returns the Android App Component exclusively attached toFlutterEngine. -
onCreate
-
registerOnBackInvokedCallback
@VisibleForTesting public void registerOnBackInvokedCallback()Registers the callback with OnBackInvokedDispatcher to capture back navigation gestures and pass them to the framework.This replaces the deprecated onBackPressed method override in order to support API 33's predictive back navigation feature.
The callback must be unregistered in order to prevent unpredictable behavior once outside the Flutter app.
-
unregisterOnBackInvokedCallback
@VisibleForTesting public void unregisterOnBackInvokedCallback()Unregisters the callback from OnBackInvokedDispatcher.This should be called when the activity is no longer in use to prevent unpredictable behavior such as being stuck and unable to press back.
-
getOnBackInvokedCallback
-
setFrameworkHandlesBack
public void setFrameworkHandlesBack(boolean frameworkHandlesBack) Description copied from interface:PlatformPlugin.PlatformPluginDelegateThe Flutter application would or would not like to handle navigation pop events itself.Relevant for registering and unregistering the app's OnBackInvokedCallback for the Predictive Back feature, for example as in
FlutterActivity.- Specified by:
setFrameworkHandlesBackin interfacePlatformPlugin.PlatformPluginDelegate
-
onStart
protected void onStart() -
onResume
protected void onResume() -
onPostResume
public void onPostResume()- Overrides:
onPostResumein classActivity
-
onPause
protected void onPause() -
onStop
protected void onStop() -
onSaveInstanceState
- Overrides:
onSaveInstanceStatein classActivity
-
release
@VisibleForTesting public void release()Irreversibly release this activity's control of theFlutterEngineand its subcomponents.Calling will disconnect this activity's view from the Flutter renderer, disconnect this activity from plugins'
ActivityControlSurface, and stop system channel messages from this activity.After calling, this activity should be disposed immediately and not be re-used.
-
detachFromFlutterEngine
@RequiresApi(24) public void detachFromFlutterEngine() -
onDestroy
@RequiresApi(24) protected void onDestroy() -
onActivityResult
- Overrides:
onActivityResultin classActivity
-
onNewIntent
- Overrides:
onNewIntentin classActivity
-
onBackPressed
public void onBackPressed()- Overrides:
onBackPressedin classActivity
-
startBackGesture
-
updateBackGestureProgress
-
commitBackGesture
@RequiresApi(34) public void commitBackGesture() -
cancelBackGesture
@RequiresApi(34) public void cancelBackGesture() -
onRequestPermissionsResult
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) - Overrides:
onRequestPermissionsResultin classActivity
-
onUserLeaveHint
public void onUserLeaveHint()- Overrides:
onUserLeaveHintin classActivity
-
onWindowFocusChanged
public void onWindowFocusChanged(boolean hasFocus) - Specified by:
onWindowFocusChangedin interfaceWindow.Callback- Overrides:
onWindowFocusChangedin classActivity
-
onTrimMemory
public void onTrimMemory(int level) - Specified by:
onTrimMemoryin interfaceComponentCallbacks2- Overrides:
onTrimMemoryin classActivity
-
getContext
FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain aContextreference as needed. -
getActivity
FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain anActivityreference as needed. This reference is used by the delegate to instantiate aFlutterView, aPlatformPlugin, and to determine if theActivityis changing configurations. -
getLifecycle
@NonNull public androidx.lifecycle.Lifecycle getLifecycle()FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain aLifecyclereference as needed. This reference is used by the delegate to provide Flutter plugins with access to lifecycle events.- Specified by:
getLifecyclein interfaceandroidx.lifecycle.LifecycleOwner
-
getFlutterShellArgs
FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain Flutter shell arguments when initializing Flutter. -
getCachedEngineId
Returns the ID of a statically cachedFlutterEngineto use within thisFlutterActivity, ornullif thisFlutterActivitydoes not want to use a cachedFlutterEngine. -
getCachedEngineGroupId
Returns the ID of a statically cachedFlutterEngineGroupto use within thisFlutterActivity, ornullif thisFlutterActivitydoes not want to use a cachedFlutterEngineGroup. -
shouldDestroyEngineWithHost
public boolean shouldDestroyEngineWithHost()Returns false if theFlutterEnginebacking thisFlutterActivityshould outlive thisFlutterActivity, or true to be destroyed when theFlutterActivityis destroyed.The default value is
truein cases whereFlutterActivitycreated its ownFlutterEngine, andfalsein cases where a cachedFlutterEnginewas provided. -
getDartEntrypointFunctionName
The Dart entrypoint that will be executed as soon as the Dart snapshot is loaded.This preference can be controlled with 2 methods:
- Pass a boolean as
FlutterActivityLaunchConfigs.EXTRA_DART_ENTRYPOINTwith the launchingIntent, or - Set a
<meta-data>calledFlutterActivityLaunchConfigs.DART_ENTRYPOINT_META_DATA_KEYwithin the Android manifest definition for thisFlutterActivity
Intentpreference takes priority.Subclasses may override this method to directly control the Dart entrypoint.
- Pass a boolean as
-
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
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_KEYwithin 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
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_ROUTEwith the launchingIntent, or - Set a
<meta-data>calledFlutterActivityLaunchConfigs.INITIAL_ROUTE_META_DATA_KEYfor thisActivityin the Android manifest.
Intentpreference takes priority.The reason that a
<meta-data>preference is supported is because thisActivitymight be the very firstActivitylaunched, 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
shouldHandleDeeplinkingreturns true, the initial route is derived from theIntentthrough the Intent.getData() instead. - Pass a boolean as
-
getAppBundlePath
A custom path to the bundle that contains this Flutter app's resources, e.g., Dart code snapshots.When this
FlutterActivityis 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
FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain the desiredRenderModethat should be used when instantiating aFlutterView. -
getTransparencyMode
FlutterActivityAndFragmentDelegate.Hostmethod that is used byFlutterActivityAndFragmentDelegateto obtain the desiredTransparencyModethat should be used when instantiating aFlutterView. -
getBackgroundMode
The desired window background mode of thisActivity, which defaults toFlutterActivityLaunchConfigs.BackgroundMode.opaque.- Returns:
- The background mode.
-
provideFlutterEngine
Hook for subclasses to easily provide a customFlutterEngine.This hook is where a cached
FlutterEngineshould be provided, if a cachedFlutterEngineis desired.- Specified by:
provideFlutterEnginein interfaceFlutterEngineProvider- Parameters:
context- The current context. e.g. An activity.- Returns:
- The Flutter engine.
-
getFlutterEngine
Hook for subclasses to obtain a reference to theFlutterEnginethat is owned by thisFlutterActivity.- Returns:
- The Flutter engine.
-
getMetaData
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) -
provideSensitiveContentPlugin
@Nullable public io.flutter.plugin.view.SensitiveContentPlugin provideSensitiveContentPlugin(@Nullable Activity activity, @NonNull FlutterEngine flutterEngine) -
configureFlutterEngine
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:
configureFlutterEnginein interfaceFlutterEngineConfigurator- Parameters:
flutterEngine- The Flutter engine.
-
cleanUpFlutterEngine
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:
cleanUpFlutterEnginein interfaceFlutterEngineConfigurator- Parameters:
flutterEngine- The Flutter engine.
-
shouldAttachEngineToActivity
public boolean shouldAttachEngineToActivity()Hook for subclasses to control whether or not theFlutterFragmentwithin thisActivityautomatically attaches itsFlutterEngineto thisActivity.This property is controlled with a protected method instead of an
Intentargument because the only situation where changing this value would help, is a situation in whichFlutterActivityis 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. IfshouldAttachEngineToActivityis true, then thisFlutterActivitywill connect itsFlutterEngineto 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). IfshouldAttachEngineToActivityis false, then thisFlutterActivitywill not automatically manage the connection between itsFlutterEngineand itself. In this case, plugins will not be offered a reference to anActivityor its OS hooks.Returning false from this method does not preclude a
FlutterEnginefrom being attaching to aFlutterActivity- it just prevents the attachment from happening automatically. A developer can choose to subclassFlutterActivityand 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
ActivityandFlutterEngineis if the developer wants to move theFlutterEnginesomewhere else. For example, a developer might want theFlutterEngineto outlive thisFlutterActivityso that it can be used later in a differentActivity. To accomplish this, theFlutterEnginemay need to be disconnected from thisFlutterActivityat an unusual time, preventing thisFlutterActivityfrom correctly managing the relationship between theFlutterEngineand itself. -
shouldHandleDeeplinking
public boolean shouldHandleDeeplinking()Whether to handle the deeplinking from theIntentautomatically if thegetInitialRoutereturns null.The default implementation looks
<meta-data>calledFlutterActivityLaunchConfigs.HANDLE_DEEPLINKING_META_DATA_KEYwithin the Android manifest definition for thisFlutterActivity. -
onFlutterSurfaceViewCreated
-
onFlutterTextureViewCreated
-
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
falsemeans the host application dispatches these app lifecycle events, while returntruemeans the engine dispatches these events.Defaults to
true. -
attachToEngineAutomatically
public boolean attachToEngineAutomatically()Whether to automatically attach theFlutterViewto the engine.Returning
falsemeans that the task of attaching theFlutterViewto the engine will be taken over by the host application.Defaults to
true. -
getBackCallbackState
public boolean getBackCallbackState() -
updateSystemUiOverlays
public void updateSystemUiOverlays()
-