检查应用程序是否在第一次运行
这个问题在这里已经有了答案:
以下是使用SharedPreferences
实现“首次运行”检查的示例。
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();
}
}
}
当代码运行prefs.getBoolean(...)
如果没有一个boolean
保存在SharedPreferences
与键“firstrun”则表示该应用程序从未运行(因为没有曾经保存一个布尔值与该键或用户已经清除了应用程序数据以强制执行“首次运行”场景)。 如果这不是第一次运行,那么行prefs.edit().putBoolean("firstrun", false).commit();
将被执行,因此prefs.getBoolean("firstrun", true)
将实际返回false,因为它覆盖了作为第二个参数提供的默认true。
接受的答案不区分第一次运行和随后的升级。 只需在共享首选项中设置布尔值就会告诉你它是否是第一次安装应用程序后的第一次运行。 如果稍后想要升级应用并对该升级的第一次运行进行一些更改,则不能再使用该布尔值,因为共享首选项是跨升级保存的。
此方法使用共享首选项来保存版本代码而不是布尔值。
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();
}
您可能会在主要活动中从onCreate
调用此方法,以便每次启动应用程序时都会对其进行检查。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkFirstRun();
}
private void checkFirstRun() {
// ...
}
}
如果需要,您可以根据用户以前安装的版本来调整代码以执行特定的操作。
想法来自这个答案。 这些也有帮助:
如果您无法获取版本代码,请参阅以下问答:
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/90753.html