I followed this guide - Splash displays the right way to create a Splash screen for my Android application, so now I have 2 events (MainActivity and SplashActivity)
The problem is that Deep Links miss is behaving now, because instead of launching MainActivity they launch SplashActivity .
I do not want SplashActivity to SplashActivity displayed only after the application has started.
What can I do?
SplashActivity:
public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } }
MainActivity:
public class MainActivity extends SplashActivity implements OnImagePickerPermissionsCallback { private PermissionListener listener; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void setPermissionListener(PermissionListener listener) { this.listener = listener; } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (listener != null) { listener.onRequestPermissionsResult(requestCode, permissions, grantResults); } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } @Override public View createSplashLayout() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(getResources().getColor(R.color.navBarColor)); } LinearLayout view = new LinearLayout(this);
Manifest file:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" /> <application android:name=".MainApplication" android:allowBackup="true" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme" > <service android:name="com.evollu.react.fcm.MessagingService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name="com.evollu.react.fcm.InstanceIdService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> <receiver android:name="com.evollu.react.fcm.FIRLocalMessagingPublisher"/> <receiver android:enabled="true" android:exported="true" android:name="com.evollu.react.fcm.FIRSystemBootEventReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.QUICKBOOT_POWERON"/> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <activity android:name=".SplashActivity" android:label="@string/app_name" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustResize" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:screenOrientation="portrait" android:launchMode="singleTop" > <intent-filter> <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/> </intent-filter> <intent-filter> <action android:name="fcm.ACTION.HELLO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="www.myExampleDomain.com" /> <data android:scheme="myExampleDomain"/> </intent-filter> </activity> <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> </application>
Edit: some people have indicated that I am using SplashActivity . It is true that the code is the next action. This is part of the react-native-navigation library that I use for on-screen navigation. Not sure if this will help, but here is the code:
SplashActivity:
public abstract class SplashActivity extends AppCompatActivity { public static boolean isResumed = false; public static void start(Activity activity) { Intent intent = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName()); if (intent == null) return; intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(intent); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setSplashLayout(); IntentDataHandler.saveIntentData(getIntent()); } @Override protected void onResume() { super.onResume(); isResumed = true; if (NavigationApplication.instance.getReactGateway().hasStartedCreatingContext()) { if (CompatUtils.isSplashOpenedOverNavigationActivity(this, getIntent())) { finish(); return; } NavigationApplication.instance.getEventEmitter().sendAppLaunchedEvent(); if (NavigationApplication.instance.clearHostOnActivityDestroy()) { overridePendingTransition(0, 0); finish(); } return; } if (ReactDevPermission.shouldAskPermission()) { ReactDevPermission.askPermission(this); return; } if (NavigationApplication.instance.isReactContextInitialized()) { NavigationApplication.instance.getEventEmitter().sendAppLaunchedEvent(); return; }
MainApplication.java The public MainApplication class extends the capabilities of NavigationApplication ReactInstanceHolder {
@Override public boolean clearHostOnActivityDestroy() { return false; } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH) { // only for KITKAT_WATCH and newer versions MultiDex.install(this); } } @Override public boolean isDebug() { // Make sure you are using BuildConfig from your own application return BuildConfig.DEBUG; } @Override public String getJSMainModuleName() { return "index"; } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Log.v(TAG, "onConfigChange"+newConfig); Intent intent = new Intent("onConfigurationChanged"); intent.putExtra("newConfig", newConfig); this.sendBroadcast(intent); } // 2. Override the getJSBundleFile method in order to let // the CodePush runtime determine where to get the JS // bundle location from on each app start @Override public String getJSBundleFile() { return CodePush.getJSBundleFile(); } @NonNull @Override public List<ReactPackage> createAdditionalReactPackages() { return Arrays.<ReactPackage>asList( new LinearGradientPackage(), new OrientationPackage(), new VectorIconsPackage(), new KeychainPackage(), new BackgroundTimerPackage(), new RNI18nPackage(), BugsnagReactNative.getPackage(), new BlurViewPackage(), new PickerViewPackage(), new ImagePickerPackage(), new RNFetchBlobPackage(), new MapsPackage(), new FIRMessagingPackage(), new RNAmplitudeSDKPackage(MainApplication.this), new RNVersionCheckPackage(), new RNCardIOPackage(), new AndroidWebViewPackage(), new WheelPackage() ); } @Override public void onCreate() { super.onCreate(); setActivityCallbacks(new ActivityCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { } @Override public void onActivityDestroyed(Activity activity) { } // @Override // public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // super.onRequestPermissionsResult(requestCode, permissions, grantResults); // } }); } @Override public ReactInstanceManager getReactInstanceManager() { return getReactNativeHost().getReactInstanceManager(); } }
Any hints would be greatly appreciated, thanks!