현재 Android 앱을 개발 중입니다. 앱이 처음 실행될 때 뭔가를해야합니다. 즉, 프로그램이 처음 실행될 때만 코드가 실행됩니다.
답변
또 다른 아이디어는 공유 기본 설정의 설정을 사용하는 것입니다. 빈 파일을 확인하는 것과 동일한 일반적인 아이디어이지만 아무것도 저장하는 데 사용되지 않는 빈 파일이 떠 다니지 않습니다.
답변
SharedPreferences 를 사용하여 앱이 “처음 실행”되었는지 확인할 수 있습니다 . 그냥 사용 부울 변수 ( “my_first_time”)를하고 해당 값을 변경 거짓 “처음”에 대한 귀하의 작업이 끝나면.
이것은 앱을 처음 열 때 잡는 코드입니다.
final String PREFS_NAME = "MyPrefsFile";
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
if (settings.getBoolean("my_first_time", true)) {
//the app is being launched for first time, do something
Log.d("Comments", "First time");
// first time task
// record the fact that the app has been started at least once
settings.edit().putBoolean("my_first_time", false).commit();
}
답변
부울 플래그뿐만 아니라 전체 버전 코드를 저장하는 것이 좋습니다. 이렇게하면 새 버전에서 처음 시작하는 경우 처음에 쿼리 할 수도 있습니다. 예를 들어이 정보를 사용하여 “새로운 기능”대화 상자를 표시 할 수 있습니다.
다음 코드는 “컨텍스트 인”모든 Android 클래스 (활동, 서비스, …)에서 작동해야합니다. 별도의 (POJO) 클래스에 포함하려는 경우 예를 들어 여기 에 설명 된 “정적 컨텍스트”사용을 고려할 수 있습니다 .
/**
* Distinguishes different kinds of app starts: <li>
* <ul>
* First start ever ({@link #FIRST_TIME})
* </ul>
* <ul>
* First start in this version ({@link #FIRST_TIME_VERSION})
* </ul>
* <ul>
* Normal app start ({@link #NORMAL})
* </ul>
*
* @author schnatterer
*
*/
public enum AppStart {
FIRST_TIME, FIRST_TIME_VERSION, NORMAL;
}
/**
* The app version code (not the version name!) that was used on the last
* start of the app.
*/
private static final String LAST_APP_VERSION = "last_app_version";
/**
* Finds out started for the first time (ever or in the current version).<br/>
* <br/>
* Note: This method is <b>not idempotent</b> only the first call will
* determine the proper result. Any subsequent calls will only return
* {@link AppStart#NORMAL} until the app is started again. So you might want
* to consider caching the result!
*
* @return the type of app start
*/
public AppStart checkAppStart() {
PackageInfo pInfo;
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
AppStart appStart = AppStart.NORMAL;
try {
pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int lastVersionCode = sharedPreferences
.getInt(LAST_APP_VERSION, -1);
int currentVersionCode = pInfo.versionCode;
appStart = checkAppStart(currentVersionCode, lastVersionCode);
// Update version in preferences
sharedPreferences.edit()
.putInt(LAST_APP_VERSION, currentVersionCode).commit();
} catch (NameNotFoundException e) {
Log.w(Constants.LOG,
"Unable to determine current app version from pacakge manager. Defenisvely assuming normal app start.");
}
return appStart;
}
public AppStart checkAppStart(int currentVersionCode, int lastVersionCode) {
if (lastVersionCode == -1) {
return AppStart.FIRST_TIME;
} else if (lastVersionCode < currentVersionCode) {
return AppStart.FIRST_TIME_VERSION;
} else if (lastVersionCode > currentVersionCode) {
Log.w(Constants.LOG, "Current version code (" + currentVersionCode
+ ") is less then the one recognized on last startup ("
+ lastVersionCode
+ "). Defenisvely assuming normal app start.");
return AppStart.NORMAL;
} else {
return AppStart.NORMAL;
}
}
다음과 같은 활동에서 사용할 수 있습니다.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
switch (checkAppStart()) {
case NORMAL:
// We don't want to get on the user's nerves
break;
case FIRST_TIME_VERSION:
// TODO show what's new
break;
case FIRST_TIME:
// TODO show a tutorial
break;
default:
break;
}
// ...
}
// ...
}
이 JUnit 테스트를 사용하여 기본 로직을 확인할 수 있습니다.
public void testCheckAppStart() {
// First start
int oldVersion = -1;
int newVersion = 1;
assertEquals("Unexpected result", AppStart.FIRST_TIME,
service.checkAppStart(newVersion, oldVersion));
// First start this version
oldVersion = 1;
newVersion = 2;
assertEquals("Unexpected result", AppStart.FIRST_TIME_VERSION,
service.checkAppStart(newVersion, oldVersion));
// Normal start
oldVersion = 2;
newVersion = 2;
assertEquals("Unexpected result", AppStart.NORMAL,
service.checkAppStart(newVersion, oldVersion));
}
조금 더 노력하면 아마도 안드로이드 관련 항목 (PackageManager 및 SharedPreferences)도 테스트 할 수 있습니다. 시험 작성에 관심이있는 사람이 있습니까? 🙂
위의 코드는 android:versionCode
AndroidManifest.xml에서 엉망이되지 않는 경우에만 제대로 작동합니다 .
답변
업데이트 여부에 따라 응용 프로그램이 처음인지 아닌지 확인하기 위해 해결했습니다.
private int appGetFirstTimeRun() {
//Check if App Start First Time
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
//Log.d("appPreferences", "app_first_time = " + appLastBuildVersion);
if (appLastBuildVersion == appCurrentBuildVersion ) {
return 1; //ya has iniciado la appp alguna vez
} else {
appPreferences.edit().putInt("app_first_time",
appCurrentBuildVersion).apply();
if (appLastBuildVersion == 0) {
return 0; //es la primera vez
} else {
return 2; //es una versión nueva
}
}
}
계산 결과 :
- 0 : 처음 인 경우.
- 1 : 시작되었습니다.
- 2 : 한 번 시작되었지만 해당 버전이 아닙니다. 즉, 업데이트입니다.
답변
Android SharedPreferences 를 사용할 수 있습니다 .
Android SharedPreferences를 사용하면 키-값 쌍 형식으로 비공개 기본 애플리케이션 데이터를 저장할 수 있습니다.
암호
사용자 정의 클래스 SharedPreference 만들기
public class SharedPreference {
android.content.SharedPreferences pref;
android.content.SharedPreferences.Editor editor;
Context _context;
private static final String PREF_NAME = "testing";
// All Shared Preferences Keys Declare as #public
public static final String KEY_SET_APP_RUN_FIRST_TIME = "KEY_SET_APP_RUN_FIRST_TIME";
public SharedPreference(Context context) // Constructor
{
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, 0);
editor = pref.edit();
}
/*
* Set Method Generally Store Data;
* Get Method Generally Retrieve Data ;
* */
public void setApp_runFirst(String App_runFirst)
{
editor.remove(KEY_SET_APP_RUN_FIRST_TIME);
editor.putString(KEY_SET_APP_RUN_FIRST_TIME, App_runFirst);
editor.apply();
}
public String getApp_runFirst()
{
String App_runFirst= pref.getString(KEY_SET_APP_RUN_FIRST_TIME, "FIRST");
return App_runFirst;
}
}
이제 활동을 열고 초기화하십시오 .
private SharedPreference sharedPreferenceObj; // Declare Global
이제 OnCreate 섹션 에서 이것을 호출 하십시오.
sharedPreferenceObj=new SharedPreference(YourActivity.this);
지금 확인 중
if(sharedPreferenceObj.getApp_runFirst().equals("FIRST"))
{
// That's mean First Time Launch
// After your Work , SET Status NO
sharedPreferenceObj.setApp_runFirst("NO");
}
else
{
// App is not First Time Launch
}
답변
여기에 대한 몇 가지 코드가 있습니다.
String path = Environment.getExternalStorageDirectory().getAbsolutePath() +
"/Android/data/myapp/files/myfile.txt";
boolean exists = (new File(path)).exists();
if (!exists) {
doSomething();
}
else {
doSomethingElse();
}
답변
빈 파일이 존재하지 않는지 확인한 다음 코드를 실행하고 파일을 생성하면됩니다.
예 :
if(File.Exists("emptyfile"){
//Your code here
File.Create("emptyfile");
}