Android 에서 App 의 시작 인터페이스 Splash 의 작성 방법 에 대해 자세히 알 아 보기

1. Splash 인터페이스의 역할 은 제품 의 Logo 응용 프로그램 초기 화 작업 검사 응용 프로그램의 버 전 을 보 여 줍 니 다. 현재 응용 프로그램 이 합 법 적 으로 등록 되 었 는 지 확인 합 니 다.
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); 
  } 

 그림 을 레이아웃 파일 에 배경 으로 놓 으 면 됩 니 다.

좋은 웹페이지 즐겨찾기