Intro 화면을 보여주는 액티비티가 있습니다.()
onCreate에서 대충 이정도의 메소드를 호출해주고 있는데요
//네트워크 체크
networkCheck();
//유심 체크
USIMcheck();
//GPS 체크
GPScheck();
// db 초기화
isExistDB();
//App 버전체크
versionCheck();
예를 들어 versionCheck() 메서드에서 Fail이되면 AlertDialog로 보여주고 URL로 보내게 되어있습니다.
앱 기동시 Fail이 났음에도 불구하고 바로 다음 체크 메서드를 타버려서 인터넷이 뒤로 깔리게 되네요..
쓰레드를 사용해서 해야하는건지 감이 잘안옵니다. 고수님들의 구원의 손길 기다리겠습니다..ㅠ
소스 첨부합니다.
public class AnymediaStartup extends Activity {
private Context mContext = null;
private Handler mHandler = new Handler();
private Thread mThread = null;
private AlertDialog.Builder mAb = null;
private TextView mTv_IntroMsg = null;
private boolean mB_ExistOBUInfo = false; //저장된 OBU 정보가 있으면 T
private boolean mB_NeedUpdateTallingZone = true; //톨링존 정보 업데이트가 필요하면 T
private int mCount = 0;
private boolean fromOnCreate = true; //onCreate()가 끝나고 진입했을 때만 T
private static final String TAG = "AnymediaStartup";
private static final int REQUEST_CODE_PROVIDER_SETTINGS_LOCATION = 1000;
private static final int REQUEST_CODE_UPDATE_TO_PLAY_STORE = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("hgkim", "AnymediaStartup onCreate()");
mContext = getApplicationContext();
setContentView(R.layout.intro);
mTv_IntroMsg = (TextView) findViewById(R.id.tv_intro_msg);
Utils.setTypeFace(mContext, mTv_IntroMsg);
mThread = new Thread(new Runnable() {
@Override
public void run() {
//네트워크 체크
networkCheck();
//유심 체크
USIMcheck();
//GPS 체크
GPScheck();
// db 초기화
isExistDB();
//App 버전체크
versionCheck();
//OBU 체크
OBUCheck();
//톨링존 정보 체크
tallingZoneCheck();
startUp();
}
});
mThread.start();
}
@Override
protected void onResume() {
super.onResume();
Log.v("hgkim", "AnymediaStartup onResume() mCount: " + ++mCount);
//onCreate()에서 넘어왔는지, 다른화면에서 돌아왔는지
if(fromOnCreate){
fromOnCreate = false;
}
}
@Override
protected void onPause() {
super.onPause();
Log.v("hgkim", "AnymediaStartup onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.v("hgkim", "AnymediaStartup onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("hgkim", "AnymediaStartup onDestroy()");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v("hgkim", "AnymediaStartup onActivityResult() requestCode: " + requestCode + " resultCode: " + resultCode);
if(requestCode == REQUEST_CODE_PROVIDER_SETTINGS_LOCATION) {
//TODO flow잡아야함..
} else if(requestCode == REQUEST_CODE_UPDATE_TO_PLAY_STORE) {
//TODO flow잡아야함..
finish();
}
}
private void networkCheck() {
Log.i("hgkim", "AnymediaStartup networkCheck()");
mTv_IntroMsg.setText("네트워크를 체크 중 입니다.");
if(!Utils.isNetworkON(mContext)){
mAb = new AlertDialog.Builder(this);
mHandler.post(new Runnable() {
@Override
public void run() {
mAb.setTitle("네트워크 에러")
.setMessage("네트워크 연결 상태를 확인해 주세요")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).create().show();
}
});
Log.i("hgkim", "AnymediaStartup networkCheck() Fail");
} else {
Log.i("hgkim", "AnymediaStartup networkCheck() Pass");
}
}
private void USIMcheck() {
Log.i("hgkim", "AnymediaStartup USIMcheck()");
mTv_IntroMsg.setText("USIM 정보를 체크 중 입니다.");
if(!Utils.simCheck(mContext)){
mAb = new AlertDialog.Builder(this);
mHandler.post(new Runnable() {
@Override
public void run() {
mAb.setTitle("USIM 에러")
.setMessage("USIM을 확인해 주세요")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).create().show();
}
});
Log.i("hgkim", "AnymediaStartup USIMcheck() Fail");
} else {
Log.i("hgkim", "AnymediaStartup USIMcheck() Pass");
}
}
private void GPScheck() {
Log.i("hgkim", "AnymediaStartup GPScheck()");
mTv_IntroMsg.setText("GPS 설정값을 체크중 입니다.");
if(!Utils.isGPSOn(mContext)){
mAb = new AlertDialog.Builder(this);
mHandler.post(new Runnable() {
@Override
public void run() {
mAb.setTitle("GPS 설정")
.setMessage("본 어플은 GPS를 사용하지 않으면 이용할 수 없습니다. GPS를 켜시겠습니까?")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE_PROVIDER_SETTINGS_LOCATION);
}
}).setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).create().show();
}
});
Log.i("hgkim", "AnymediaStartup GPScheck() Fail");
} else {
Log.i("hgkim", "AnymediaStartup GPScheck() Pass");
}
}
private void isExistDB() {
Log.i("hgkim", "AnymediaStartup isExistDB()");
boolean existDb = initDatabaseConfig();
if(existDb) {
Log.d(TAG+">>existDb", String.valueOf(existDb));
Log.i("hgkim", "AnymediaStartup isExistDB() Pass");
} else {
mAb = new AlertDialog.Builder(this);
mHandler.post(new Runnable() {
@Override
public void run() {
mAb.setTitle("DB 에러")
.setMessage("DB 초기화에 실패하엿습니다.")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).create().show();
}
});
Log.i("hgkim", "AnymediaStartup isExistDB() Fail");
}
}
protected void versionCheck() {
Log.i("hgkim", "AnymediaStartup versionCheck()");
mTv_IntroMsg.setText(R.string.intro_msg1);
String anyconfig = "any.config";
String ANYMEDIA_VERSION_SERVER = "1.2"; //서버 버전
String ANYMEDIA_VERSION_PREF = null; //sp에 저장되어있는 현재 버전
PrefManager pf = new PrefManager(this, anyconfig);
if((ANYMEDIA_VERSION_PREF = pf.getPreferences("ANYMEDIA_VERSION")) != null) { //최초실행X
if(ANYMEDIA_VERSION_SERVER.equals(ANYMEDIA_VERSION_PREF)){ //최신버전O
Log.d("VERCHK","current version:"+ANYMEDIA_VERSION_SERVER);
Log.i("hgkim", "AnymediaStartup versionCheck() already recently version");
} else { //최신버전X
mAb = new AlertDialog.Builder(this);
mHandler.post(new Runnable() {
@Override
public void run() {
mAb.setTitle("업데이트")
.setMessage("최신버전으로 업데이트 하시겠습니까?")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d("VERCHK","go google~");
Log.i("hgkim", "AnymediaStartup versionCheck() go google store");
Uri uri = Uri.parse("http://www.google.co.kr"); //dummy data
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivityForResult(intent, REQUEST_CODE_UPDATE_TO_PLAY_STORE);
}
}).setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("hgkim", "AnymediaStartup versionCheck() nagative update");
dialog.dismiss();
finish();
}
}).create().show();
}
});
pf.putPreferences("ANYMEDIA_VERSION", null); //업데이트를 눌렀으므로 버전정보를 지워둔다
}
} else { //버전정보가 SP에 없을때
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
String manifestVersion = info.versionName;
pf.putPreferences("ANYMEDIA_VERSION", manifestVersion);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Log.i("hgkim", "AnymediaStartup versionCheck() not exist preference");
}
}
protected void OBUCheck() {
Log.i("hgkim", "AnymediaStartup OBUCheck()");
mTv_IntroMsg.setText(R.string.intro_msg2);
OBUDAO odao = new OBUDAO(this);
if(odao.getRowCount() > 0) // cnt > 0 && 단말기발급id 있을경우
mB_ExistOBUInfo = true;
if(!mB_ExistOBUInfo) {
mHandler.post(new Runnable() {
@Override
public void run() {
mTv_IntroMsg.setText(R.string.intro_msg2_1);
}
});
Log.i("hgkim", "AnymediaStartup OBUCheck not exist");
Intent intent = new Intent(mContext, StartupCarRegistrationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
Log.i("hgkim", "AnymediaStartup OBUCheck() Fail");
} else {
Log.i("hgkim", "AnymediaStartup OBUCheck() Pass");
}
}
protected void tallingZoneCheck() {
Log.i("hgkim", "AnymediaStartup tallingZoneCheck()");
mTv_IntroMsg.setText(R.string.intro_msg3);
if(mB_NeedUpdateTallingZone) {
Log.i("hgkim", "AnymediaStartup tallingZoneCheck need update");
mTv_IntroMsg.setText(R.string.intro_msg4);
//TODO 톨링존 정보 update 모듈
} else {
Log.i("hgkim", "AnymediaStartup tallingZoneCheck recently tallingzone");
mTv_IntroMsg.setText(R.string.intro_msg4_1);
}
}
protected void startUp() {
Log.i("hgkim", "AnymediaStartup startUp()");
mTv_IntroMsg.setText(R.string.intro_msg5);
Intent intent = new Intent(mContext, HomeActivity.class);
Log.i("hgkim", "AnymediaStartup startUp() Complete");
startActivity(intent);
}
public boolean initDatabaseConfig(){
InitConfigDAO dao = new InitConfigDAO(this);
return dao.isSuccessInit();
}
}
alertdialog 는 별도의 쓰레드에서 동작하신다고 생각하세요.
alertdialog 띄운다고 멈춰있고 하지 않습니다.
상태 체크를 해서 실패하면 멈춰버리게 하고 alertdialog 띄우세요