public class FlutterFragmentActivity extends androidx.fragment.app.FragmentActivity implements SplashScreenProvider, FlutterEngineProvider, FlutterEngineConfigurator
Activity
that is based upon FragmentActivity
.
FlutterFragmentActivity
exists because there are some Android APIs in the ecosystem
that only accept a FragmentActivity
. If a FragmentActivity
is not required, you
should consider using a regular FlutterActivity
instead, because FlutterActivity
is considered to be the standard, canonical implementation of a Flutter Activity
.
Modifier and Type | Class and Description |
---|---|
static class |
FlutterFragmentActivity.CachedEngineIntentBuilder
Builder to create an
Intent that launches a FlutterFragmentActivity with an
existing FlutterEngine that is cached in FlutterEngineCache . |
static class |
FlutterFragmentActivity.NewEngineIntentBuilder
Builder to create an
Intent that launches a FlutterFragmentActivity with a new
FlutterEngine and the desired configuration. |
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
ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BACKUP_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_IMPORTANT, BIND_NOT_FOREGROUND, BIND_NOT_VISIBLE, BIND_WAIVE_PRIORITY, CLIPBOARD_SERVICE, CONNECTIVITY_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, COUNTRY_DETECTOR, DEVICE_POLICY_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, KEYGUARD_SERVICE, LAYOUT_INFLATER_SERVICE, LOCATION_SERVICE, MEDIA_ROUTER_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NETWORK_POLICY_SERVICE, NETWORK_STATS_SERVICE, NETWORKMANAGEMENT_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, POWER_SERVICE, SCHEDULING_POLICY_SERVICE, SEARCH_SERVICE, SENSOR_SERVICE, SERIAL_SERVICE, SIP_SERVICE, STATUS_BAR_SERVICE, STORAGE_SERVICE, TELEPHONY_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, THROTTLE_SERVICE, UI_MODE_SERVICE, UPDATE_LOCK_SERVICE, USB_SERVICE, VIBRATOR_SERVICE, WALLPAPER_SERVICE, WIFI_P2P_SERVICE, WIFI_SERVICE, WINDOW_SERVICE
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 and Description |
---|
FlutterFragmentActivity() |
Modifier and Type | Method and Description |
---|---|
void |
cleanUpFlutterEngine(FlutterEngine flutterEngine)
Hook for the host to cleanup references that were established in
configureFlutterEngine(FlutterEngine) before the host is destroyed or detached. |
void |
configureFlutterEngine(FlutterEngine flutterEngine)
Hook for subclasses to easily configure a
FlutterEngine , e.g., register plugins. |
static Intent |
createDefaultIntent(Context launchContext)
Creates an
Intent that launches a FlutterFragmentActivity , which executes a
main() Dart entrypoint, and displays the "/" route as Flutter's initial route. |
protected FlutterFragment |
createFlutterFragment()
Creates the instance of the
FlutterFragment that this FlutterFragmentActivity
displays. |
protected String |
getAppBundlePath()
The 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 this
Activity , which defaults to FlutterActivityLaunchConfigs.BackgroundMode.opaque . |
protected String |
getCachedEngineId()
Returns the ID of a statically cached
FlutterEngine to use within this FlutterFragmentActivity , or null if this FlutterFragmentActivity does not want
to use a cached FlutterEngine . |
String |
getDartEntrypointFunctionName()
The Dart entrypoint that will be executed as soon as the Dart snapshot is loaded.
|
protected FlutterEngine |
getFlutterEngine() |
protected String |
getInitialRoute()
The initial route that a Flutter app will render upon loading and executing its Dart code.
|
protected void |
onActivityResult(int requestCode,
int resultCode,
Intent data) |
void |
onBackPressed() |
protected void |
onCreate(Bundle savedInstanceState) |
protected void |
onNewIntent(Intent intent) |
void |
onPostResume() |
void |
onRequestPermissionsResult(int requestCode,
String[] permissions,
int[] grantResults) |
void |
onTrimMemory(int level) |
void |
onUserLeaveHint() |
FlutterEngine |
provideFlutterEngine(Context context)
Hook for subclasses to easily provide a custom
FlutterEngine . |
SplashScreen |
provideSplashScreen()
Provides a
SplashScreen to display while Flutter initializes and renders its first
frame. |
protected boolean |
shouldAttachEngineToActivity()
Hook for subclasses to control whether or not the
FlutterFragment within this Activity automatically attaches its FlutterEngine to this Activity . |
boolean |
shouldDestroyEngineWithHost()
Returns false if the
FlutterEngine backing this FlutterFragmentActivity should
outlive this FlutterFragmentActivity , or true to be destroyed when the FlutterFragmentActivity is destroyed. |
static FlutterFragmentActivity.CachedEngineIntentBuilder |
withCachedEngine(String cachedEngineId)
Creates a
FlutterFragmentActivity.CachedEngineIntentBuilder , which can be used to configure an Intent
to launch a FlutterFragmentActivity that internally uses an existing FlutterEngine that is cached in FlutterEngineCache . |
static FlutterFragmentActivity.NewEngineIntentBuilder |
withNewEngine()
Creates an
FlutterFragmentActivity.NewEngineIntentBuilder , which can be used to
configure an Intent to launch a FlutterFragmentActivity that internally creates
a new FlutterEngine using the desired Dart entrypoint, initial route, etc. |
dump, getSupportFragmentManager, getSupportLoaderManager, onAttachFragment, onConfigurationChanged, onCreatePanelMenu, onCreateView, onCreateView, onDestroy, onLowMemory, onMenuItemSelected, onMultiWindowModeChanged, onPanelClosed, onPause, onPictureInPictureModeChanged, onPrepareOptionsPanel, onPreparePanel, onResume, onResumeFragments, onSaveInstanceState, onStart, onStateNotSaved, onStop, setEnterSharedElementCallback, setExitSharedElementCallback, startActivityForResult, startActivityForResult, startActivityFromFragment, startActivityFromFragment, startIntentSenderForResult, startIntentSenderForResult, startIntentSenderFromFragment, supportFinishAfterTransition, supportInvalidateOptionsMenu, supportPostponeEnterTransition, supportStartPostponedEnterTransition, validateRequestPermissionsRequestCode
getLastCustomNonConfigurationInstance, getLifecycle, getOnBackPressedDispatcher, getSavedStateRegistry, getViewModelStore, onRetainCustomNonConfigurationInstance, onRetainNonConfigurationInstance
dispatchKeyEvent, dispatchKeyShortcutEvent, getExtraData, putExtraData, superDispatchKeyEvent
addContentView, closeContextMenu, closeOptionsMenu, createPendingResult, dismissDialog, dispatchGenericMotionEvent, dispatchPopulateAccessibilityEvent, dispatchTouchEvent, dispatchTrackballEvent, findViewById, finish, finishActivity, finishActivityFromChild, finishAffinity, finishFromChild, getActionBar, getActivityToken, getApplication, getCallingActivity, getCallingPackage, getChangingConfigurations, getComponentName, getCurrentFocus, getFragmentManager, getIntent, getLastNonConfigurationInstance, getLayoutInflater, getLoaderManager, getLocalClassName, getMenuInflater, getParent, getParentActivityIntent, getPreferences, getRequestedOrientation, getSystemService, getTaskId, getTitle, getTitleColor, getVolumeControlStream, getWindow, getWindowManager, hasWindowFocus, invalidateOptionsMenu, isChangingConfigurations, isChild, isFinishing, isImmersive, isResumed, isTaskRoot, managedQuery, managedQuery, moveTaskToBack, navigateUpTo, navigateUpToFromChild, onActionModeFinished, onActionModeStarted, onApplyThemeResource, onAttachedToWindow, onAttachFragment, onChildTitleChanged, onContentChanged, onContextItemSelected, onContextMenuClosed, onCreateContextMenu, onCreateDescription, onCreateDialog, onCreateDialog, onCreateNavigateUpTaskStack, onCreateOptionsMenu, onCreatePanelView, onCreateThumbnail, onDetachedFromWindow, onGenericMotionEvent, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyShortcut, onKeyUp, onMenuOpened, onNavigateUp, onNavigateUpFromChild, onOptionsItemSelected, onOptionsMenuClosed, onPostCreate, onPrepareDialog, onPrepareDialog, onPrepareNavigateUpTaskStack, onPrepareOptionsMenu, onRestart, onRestoreInstanceState, onSearchRequested, onTitleChanged, onTouchEvent, onTrackballEvent, onUserInteraction, onWindowAttributesChanged, onWindowFocusChanged, onWindowStartingActionMode, openContextMenu, openOptionsMenu, overridePendingTransition, recreate, registerForContextMenu, removeDialog, requestWindowFeature, runOnUiThread, setContentView, setContentView, setContentView, setDefaultKeyMode, setFeatureDrawable, setFeatureDrawableAlpha, setFeatureDrawableResource, setFeatureDrawableUri, setFinishOnTouchOutside, setImmersive, setIntent, setPersistent, setProgress, setProgressBarIndeterminate, setProgressBarIndeterminateVisibility, setProgressBarVisibility, setRequestedOrientation, setResult, setResult, setSecondaryProgress, setTitle, setTitle, setTitleColor, setVisible, setVolumeControlStream, shouldUpRecreateTask, showDialog, showDialog, startActionMode, startActivities, startActivities, startActivity, startActivity, startActivityFromChild, startActivityFromChild, startActivityFromFragment, startActivityFromFragment, startActivityIfNeeded, startActivityIfNeeded, startIntentSender, startIntentSender, startIntentSenderFromChild, startIntentSenderFromChild, startManagingCursor, startNextMatchingActivity, startNextMatchingActivity, startSearch, stopManagingCursor, takeKeyEvents, triggerSearch, unregisterForContextMenu
attachBaseContext, getTheme, getThemeResId, setTheme
bindService, bindService, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingPermission, checkCallingUriPermission, checkPermission, checkUriPermission, checkUriPermission, clearWallpaper, createPackageContext, databaseList, deleteDatabase, deleteFile, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAssets, getBaseContext, getCacheDir, getClassLoader, getContentResolver, getDatabasePath, getDir, getExternalCacheDir, getExternalFilesDir, getFilesDir, getFileStreamPath, getMainLooper, getObbDir, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getResources, getSharedPreferences, getSharedPrefsFile, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isRestricted, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerReceiver, registerReceiver, removeStickyBroadcast, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendStickyBroadcast, sendStickyOrderedBroadcast, setWallpaper, setWallpaper, startInstrumentation, startService, stopService, unbindService, unregisterReceiver
getString, getString, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, registerComponentCallbacks, unregisterComponentCallbacks
@NonNull public static Intent createDefaultIntent(@NonNull Context launchContext)
Intent
that launches a FlutterFragmentActivity
, which executes a
main()
Dart entrypoint, and displays the "/" route as Flutter's initial route.@NonNull public static FlutterFragmentActivity.NewEngineIntentBuilder withNewEngine()
FlutterFragmentActivity.NewEngineIntentBuilder
, which can be used to
configure an Intent
to launch a FlutterFragmentActivity
that internally creates
a new FlutterEngine
using the desired Dart entrypoint, initial route, etc.@NonNull public static FlutterFragmentActivity.CachedEngineIntentBuilder withCachedEngine(@NonNull String cachedEngineId)
FlutterFragmentActivity.CachedEngineIntentBuilder
, which can be used to configure an Intent
to launch a FlutterFragmentActivity
that internally uses an existing FlutterEngine
that is cached in FlutterEngineCache
.protected void onCreate(@Nullable Bundle savedInstanceState)
onCreate
in class androidx.fragment.app.FragmentActivity
@Nullable public SplashScreen provideSplashScreen()
SplashScreenProvider
SplashScreen
to display while Flutter initializes and renders its first
frame.provideSplashScreen
in interface SplashScreenProvider
@NonNull protected FlutterFragment createFlutterFragment()
FlutterFragment
that this FlutterFragmentActivity
displays.
Subclasses may override this method to return a specialization of FlutterFragment
.
public void onPostResume()
onPostResume
in class androidx.fragment.app.FragmentActivity
protected void onNewIntent(@NonNull Intent intent)
onNewIntent
in class androidx.fragment.app.FragmentActivity
public void onBackPressed()
onBackPressed
in class androidx.activity.ComponentActivity
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
onRequestPermissionsResult
in interface androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback
onRequestPermissionsResult
in class androidx.fragment.app.FragmentActivity
public void onUserLeaveHint()
onUserLeaveHint
in class Activity
public void onTrimMemory(int level)
onTrimMemory
in interface ComponentCallbacks2
onTrimMemory
in class Activity
protected void onActivityResult(int requestCode, int resultCode, Intent data)
onActivityResult
in class androidx.fragment.app.FragmentActivity
@Nullable protected FlutterEngine getFlutterEngine()
public boolean shouldDestroyEngineWithHost()
FlutterEngine
backing this FlutterFragmentActivity
should
outlive this FlutterFragmentActivity
, or true to be destroyed when the FlutterFragmentActivity
is destroyed.
The default value is true
in cases where FlutterFragmentActivity
created its
own FlutterEngine
, and false
in cases where a cached FlutterEngine
was
provided.
protected boolean shouldAttachEngineToActivity()
FlutterFragment
within this Activity
automatically attaches its FlutterEngine
to this Activity
.
For an explanation of why this control exists, see FlutterFragment.shouldAttachEngineToActivity()
.
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 which FlutterFragmentActivity
is being subclassed to utilize a custom and/or cached FlutterEngine
.
Defaults to true
.
@Nullable public FlutterEngine provideFlutterEngine(@NonNull Context context)
FlutterEngine
.provideFlutterEngine
in interface FlutterEngineProvider
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine)
FlutterEngine
, e.g., register plugins.
This method is called after provideFlutterEngine(Context)
.
configureFlutterEngine
in interface FlutterEngineConfigurator
public void cleanUpFlutterEngine(@NonNull FlutterEngine flutterEngine)
configureFlutterEngine(FlutterEngine)
before the host is destroyed or detached.
This method is called in FragmentActivity.onDestroy()
.
cleanUpFlutterEngine
in interface FlutterEngineConfigurator
@NonNull protected String getAppBundlePath()
When this FlutterFragmentActivity
is run by Flutter tooling and a data String is
included in the launching Intent
, that data String is interpreted as an app bundle
path.
By default, the app bundle path is obtained from FlutterMain.findAppBundlePath(Context)
.
Subclasses may override this method to return a custom app bundle path.
@NonNull public String getDartEntrypointFunctionName()
This preference can be controlled by setting a <meta-data>
called FlutterActivityLaunchConfigs.DART_ENTRYPOINT_META_DATA_KEY
within the Android manifest
definition for this FlutterFragmentActivity
.
Subclasses may override this method to directly control the Dart entrypoint.
@NonNull protected String getInitialRoute()
This preference can be controlled with 2 methods:
FlutterActivityLaunchConfigs.EXTRA_INITIAL_ROUTE
with the
launching Intent
, or
<meta-data>
called FlutterActivityLaunchConfigs.INITIAL_ROUTE_META_DATA_KEY
for this Activity
in
the Android manifest.
Intent
preference takes priority.
The reason that a <meta-data>
preference is supported is because this Activity
might be the very first Activity
launched, which means the developer won't
have control over the incoming Intent
.
Subclasses may override this method to directly control the initial route.
@Nullable protected String getCachedEngineId()
FlutterEngine
to use within this FlutterFragmentActivity
, or null
if this FlutterFragmentActivity
does not want
to use a cached FlutterEngine
.@NonNull protected FlutterActivityLaunchConfigs.BackgroundMode getBackgroundMode()
Activity
, which defaults to FlutterActivityLaunchConfigs.BackgroundMode.opaque
.