Check if application is on its first run

This question already has an answer here:

  • Determine if android app is the first time used 13 answers

  • The following is an example of using SharedPreferences to achieve a 'first run' check.

    public class MyActivity extends Activity {
    
        SharedPreferences prefs = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Perhaps set content view here
    
            prefs = getSharedPreferences("com.mycompany.myAppName", MODE_PRIVATE);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
    
            if (prefs.getBoolean("firstrun", true)) {
                // Do first run stuff here then set 'firstrun' as false
                // using the following line to edit/commit prefs
                prefs.edit().putBoolean("firstrun", false).commit();
            }
        }
    }
    

    When the code runs prefs.getBoolean(...) if there isn't a boolean saved in SharedPreferences with the key "firstrun" then that indicates the app has never been run (because nothing has ever saved a boolean with that key or the user has cleared the app data in order to force a 'first run' scenario). If this isn't the first run then the line prefs.edit().putBoolean("firstrun", false).commit(); will have been executed and therefore prefs.getBoolean("firstrun", true) will actually return false as it overrides the default true provided as the second parameter.


    The accepted answer doesn't differentiate between a first run and subsequent upgrades. Just setting a boolean in shared preferences will only tell you if it is the first run after the app is first installed. Later if you want to upgrade your app and make some changes on the first run of that upgrade, you won't be able to use that boolean any more because shared preferences are saved across upgrades.

    This method uses shared preferences to save the version code rather than a boolean.

    import com.yourpackage.BuildConfig;
    ...
    
    private void checkFirstRun() {
    
        final String PREFS_NAME = "MyPrefsFile";
        final String PREF_VERSION_CODE_KEY = "version_code";
        final int DOESNT_EXIST = -1;
    
        // Get current version code
        int currentVersionCode = BuildConfig.VERSION_CODE;
    
        // Get saved version code
        SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        int savedVersionCode = prefs.getInt(PREF_VERSION_CODE_KEY, DOESNT_EXIST);
    
        // Check for first run or upgrade
        if (currentVersionCode == savedVersionCode) {
    
            // This is just a normal run
            return;
    
        } else if (savedVersionCode == DOESNT_EXIST) {
    
            // TODO This is a new install (or the user cleared the shared preferences)
    
        } else if (currentVersionCode > savedVersionCode) {
    
            // TODO This is an upgrade
        }
    
        // Update the shared preferences with the current version code
        prefs.edit().putInt(PREF_VERSION_CODE_KEY, currentVersionCode).apply();
    }
    

    You would probably call this method from onCreate in your main activity so that it is checked every time your app starts.

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            checkFirstRun();
        }
    
        private void checkFirstRun() {
            // ...
        }
    }
    

    If you needed to, you could adjust the code to do specific things depending on what version the user previously had installed.

    Idea came from this answer. These also helpful:

  • How can you get the Manifest Version number from the App's (Layout) XML variables?
  • User versionName value of AndroidManifest.xml in code
  • If you are having trouble getting the version code, see the following Q&A:

  • How to get the build/version number of your Android application?

  •     import java.io.File;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.RandomAccessFile;
        import java.util.UUID;
    
        import android.content.Context;
    
        public class Util {
            // ===========================================================
            //
            // ===========================================================
    
            private static final String INSTALLATION = "INSTALLATION";
    
            public synchronized static boolean isFirstLaunch(Context context) {
                String sID = null;
                boolean launchFlag = false;
                if (sID == null) {
                    File installation = new File(context.getFilesDir(), INSTALLATION);
                    try {
                        if (!installation.exists()) {
                        launchFlag = true;                          
                            writeInstallationFile(installation);
                        }
                        sID = readInstallationFile(installation);
    
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
                return launchFlag;
            }
    
            private static String readInstallationFile(File installation) throws IOException {
                RandomAccessFile f = new RandomAccessFile(installation, "r");// read only mode
                byte[] bytes = new byte[(int) f.length()];
                f.readFully(bytes);
                f.close();
    
                return new String(bytes);
            }
    
            private static void writeInstallationFile(File installation) throws IOException {
                FileOutputStream out = new FileOutputStream(installation);
                String id = UUID.randomUUID().toString();
                out.write(id.getBytes());
                out.close();
            }
        }
    
    > Usage (in class extending android.app.Activity)
    
    Util.isFirstLaunch(this);
    
    链接地址: http://www.djcxy.com/p/90754.html

    上一篇: 我如何获得我的应用程序版本

    下一篇: 检查应用程序是否在第一次运行