Android 에서 App 의 시작 인터페이스 Splash 의 작성 방법 에 대해 자세히 알 아 보기
7710 단어 모 바 일 개발 - Android
2. 인터페이스의 xml 정 의 는 레이아웃 배경 을 제품 의 로고 그림 으로 설정 하고 textview 디 스 플레이 버 전 번 호 를 추가 합 니 다.
3. 버 전 번 호 를 동적 으로 가 져 오 는 방법
public String getAppVersion(){
PackageManager pm = getPackageManager();
try {
PackageInfo info = pm.getPackageInfo(getPackageName(), 0);
return info.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
// ;
return "";
}
}
4. 서버 를 연결 하여 업데이트 정보 업그레이드 알림 을 가 져 오 는 대화 상자
protected void showUpdateDialog() {
AlertDialog.Builder build = new Builder(this);
build.setTitle(" ");
build.setMessage(description);
build.setNegativeButton(" ", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// ;
};
});
build.setPositiveButton(" ", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
enterHome();
}
});
build.show();
하위 스 레 드 에서 서버 의 코드 checkup () 방법 을 요청 합 니 다.
private void checkup() {
new Thread() {
public void run() {
Message msg = Message.obtain();
long startTime = System.currentTimeMillis();//
try {
//
URL url = new URL(getString(R.string.serverurl));
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");//
conn.setConnectTimeout(4000);//
int code = conn.getResponseCode();// 200
if (code == 200) {
InputStream is = conn.getInputStream();
String result = StreamTools.readFromStream(is);
Log.i(TAG, " " + result);
JSONObject obj = new JSONObject(result);// json
String version = (String) obj.get("version");//
description = (String) obj.get("description");//
apkurl = (String) obj.get("apkurl");
if (getAppVersion().equals(version)) {
msg.what = ENTER_HOME;
} else {
msg.what = SHOW_UPDATE_DIALOG;
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
msg.what = URL_ERROR;
} catch (IOException e) {
e.printStackTrace();
msg.what = NETWORK_ERROR;
} catch (JSONException e) {
e.printStackTrace();
msg.what = JSON_ERROR;
} finally {
handler.sendMessage(msg);
long endTime = System.currentTimeMillis();//
long dTime = endTime-startTime;//
if (dTime<3000) {
try {
Thread.sleep(3000-dTime);//
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}.start();
}
handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case SHOW_UPDATE_DIALOG:
showUpdateDialog();
break;
case ENTER_HOME:
Toast.makeText(getApplicationContext(), "", 0).show();
enterhome();
break;
case URL_ERROR:
Toast.makeText(getApplicationContext(), "URL_ERROR", 0).show();
enterhome();
break;
case NETWORK_ERROR:
Toast.makeText(getApplicationContext(), "NETWORK_ERROR", 0).show();
enterhome();
break;
case JSON_ERROR:
Toast.makeText(getApplicationContext(), "JSON_ERROR", 0).show();
enterhome();
break;
}
}
};
5. 파일 다운로드 (Afinal 프레임 워 크 사용) 및 시스템 설치 도구 호출 APK 설치
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
FinalHttp finalHttp = new FinalHttp();
finalHttp.download(apkurl,Environment.getExternalStorageDirectory().getAbsolutePath()+
"/mobilesafe2.0.apk" , new AjaxCallBack() {
@Override
public void onLoading(long count, long current) {
super.onLoading(count, current);
tv_uapdate_info.setVisibility(View.VISIBLE);
int progress =(int) (current*100/count);
tv_uapdate_info.setText(" :"+progress+"%");
}
@Override
public void onFailure(Throwable t, int errorNo,
String strMsg) {
t.printStackTrace();
Toast.makeText(getApplicationContext(), " ", 0).show();
enterhome();
super.onFailure(t, errorNo, strMsg);
}
@Override
public void onSuccess(File t) {
super.onSuccess(t);
installAPK(t);
}
private void installAPK(File t) {
Intent intent = new Intent();//
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive");
startActivity(intent);
}
});
}else{
Toast.makeText(getApplicationContext(), " ",0).show();
return;
}
기타:
1. 4.0 을 표시 하 는 스타일: 기능 목록 에 있 는 Activity 에 대응 하 는 android: theme 를 제거 하 는 방식 입 니 다.응용 프로그램 에 넣 기;
2. splash 페이지 에서 업그레이드 알림 상자 가 뜨 면 필터 클릭 을 누 르 면 되 돌아 오 는 두 가지 방식 입 니 다.
builder.setCancelable(false); setOnCancelListener 를 터치 할 때 홈 페이지 로 바로 들 어가 도록 설정 합 니 다.
대화 상 자 는 Activity 에 마 운 트 되 어 있 습 니 다. Activity 가 존재 하지 않 으 면 대화 상 자 를 만 들 수 없습니다.getApplicationContext();생명 주기 가 길 고 응용 이 살아 있 으 면 존재 합 니 다.this 라 이 프 사이클 이 짧 습 니 다. Activity 가 존재 하지 않 는 다 면 시스템 은 그 중에서 회수 합 니 다. getBaseContext (), getApplication (), getapplicationContext ();AlertDialog 에 컨 텍스트 를 넣 을 수 없습니다.
3. Splash 는 프로그램 시작 디 테 일 을 홍보 하고 숨 기 는 데 유용 하 다. Handler 를 사용 하 는 방법 은 다음 과 같 습 니 다. (스 레 드 로 도 가능 합 니 다. 추천 하지 않 습 니 다) Activity 를 정의 하여 그림 을 표시 합 니 다. 그 중에서 가장 중요 한 것 은 Handler 를 정의 하여 메 시 지 를 보 내 고 받 는 것 입 니 다.
public class WelcomeActivity extends Activity
{
// handler, - activity
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
switch(msg.what)
{
case 0x123:
Intent intent = new Intent(WelcomeActivity.this,
OnlineExamActivity.class);
startActivity(intent);
finish();
}
}
};
onCreate () 방법 에서 handler 로 메 시 지 를 보 내 고 3000 밀리초 지연:
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_activity);
start();
}
private void start()
{
handler.sendEmptyMessageDelayed(0x123, 3000);
}
그림 을 레이아웃 파일 에 배경 으로 놓 으 면 됩 니 다.