Android app 启动画面实现
2014-10-30 15:22
246 查看
1.直接上代码
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/app_start_view"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
android:background="@drawable/start_background">
</LinearLayout>
packagecom.holl.vwifi.login.ui; importjava.io.File; importjava.io.IOException; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.URL; importorg.xmlpull.v1.XmlPullParser; importorg.xmlpull.v1.XmlPullParserFactory; importcn.jpush.android.api.InstrumentedActivity; importcom.holl.vwifi.R; importcom.holl.vwifi.application.AppContext; importcom.holl.vwifi.login.bean.ApkInfo; importcom.holl.vwifi.login.bean.MyDevInfo; importcom.holl.vwifi.login.bean.User; importcom.holl.vwifi.login.common.CommandManagement; importcom.holl.vwifi.login.db.DbManager; importcom.holl.vwifi.login.task.DownLoadFileTask; importcom.holl.vwifi.util.ComHelper; importcom.holl.vwifi.util.Logger; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.app.ProgressDialog; importandroid.app.AlertDialog.Builder; importandroid.content.DialogInterface; importandroid.content.Intent; importandroid.content.SharedPreferences; importandroid.content.DialogInterface.OnClickListener; importandroid.content.pm.PackageManager.NameNotFoundException; importandroid.net.Uri; importandroid.os.Bundle; importandroid.os.Environment; importandroid.os.Handler; importandroid.os.Message; importandroid.view.View; importandroid.view.animation.AlphaAnimation; importandroid.view.animation.Animation; importandroid.view.animation.Animation.AnimationListener; importandroid.widget.LinearLayout; importandroid.widget.Toast; /** *应用程序启动类:显示欢迎界面并跳转到主界面 *@Description:(这里用一句话描述这个类的作用) *@authoryehj *@date2014-8-7上午9:28:15 *@version1.01 */ publicclassAppStartextendsInstrumentedActivity{ privatestaticfinalStringTAG="AppStart"; privateMyDevInfodevInfo; privateProgressDialogprogressDialog; privatestaticfinalStringSHAREDPREFERENCES_NAME="first_pref"; privatestaticfinalStringtransferIp="112.124.124.183"; privatebooleanisFirstIn; privateAppContextappContext;//全局Context ApkInfoinfo=null; DownLoadFileThreadTasktask; privateHandlermHandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ super.handleMessage(msg); //判断服务器版本号和客户端的版本号是否相同 if(msg.what==0){ //showUpdataDialog();//弹出来升级对话框 } if(msg.what==1){//下载 progressDialog.show(); newThread(task).start(); } if(msg.what==2){//下载过程中,网络异常 Toast.makeText(AppStart.this,R.string.download_apk_fail,Toast.LENGTH_SHORT).show(); progressDialog.dismiss(); } if(msg.what==3){//到导航页面 } } }; @Override protectedvoidonCreate(BundlesavedInstanceState){ //TODOAuto-generatedmethodstub super.onCreate(savedInstanceState); finalViewview=View.inflate(this,R.layout.start,null); LinearLayoutwellcome=(LinearLayout)view.findViewById(R.id.app_start_view); setContentView(view); appContext=(AppContext)getApplication(); //渐变展示启动屏 AlphaAnimationaa=newAlphaAnimation(0.3f,1.0f); aa.setDuration(2000); view.startAnimation(aa); aa.setAnimationListener(newAnimationListener() { @Override publicvoidonAnimationEnd(Animationarg0){ redirectTo(); } @Override publicvoidonAnimationRepeat(Animationanimation){} @Override publicvoidonAnimationStart(Animationanimation){} }); progressDialog=newProgressDialog(this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage(this.getResources().getText(R.string.downloading)); progressDialog.setCancelable(false);//注意一下 newThread(){ @Override publicvoidrun(){ try{ sleep(1000); //handler.sendEmptyMessage(0); if(isNeedUpdate(getVerCode())){ //弹出来升级对话框 mHandler.sendEmptyMessage(0); } }catch(InterruptedExceptione){ e.printStackTrace(); } } }.start(); } @Override protectedvoidonDestroy(){ //TODOAuto-generatedmethodstub super.onDestroy(); } /** *跳转到... */ privatevoidredirectTo(){ SharedPreferencespreferences=getSharedPreferences( SHAREDPREFERENCES_NAME,MODE_PRIVATE); //取得相应的值,如果没有该值,说明还未写入,用true作为默认值 isFirstIn=preferences.getBoolean("isFirstIn",true); Intentintent=null; if(isFirstIn){ intent=newIntent(this,GuideActivity.class); startActivity(intent); }else{ Logger.d(TAG,appContext.ifHaveUserLogin()+""); if(appContext.ifHaveUserLogin()){ intent=newIntent(this,LoginBindRouter.class); startActivity(intent); }else{ if(ComHelper.isWifiConnected(appContext)){ appContext.getCom().connectVwifi(null,null,ComHelper.getGateWay(appContext),transferIp); intflag=appContext.getCom().connectvwifiready(); Logger.d("yehj","flag=="+flag); if(flag==0){ devInfo=appContext.getCom().getMyDevInfo(); if(devInfo!=null&&devInfo.getRes()!=null&&devInfo.getRes().equals("0")){ appContext.setWifiSSID(devInfo.getAp_Info().getSSID()); Logger.d("yehj","STATUS=="+devInfo.getSTATUS()); if(devInfo.getSTATUS()!=null&&devInfo.getSTATUS().equals("0")){ intent=newIntent(this,CheckWanActivity.class); startActivity(intent); }else{ intent=newIntent(this,LoginBindRouter.class); startActivity(intent); } } }else{ intent=newIntent(this,LoginBindRouter.class); startActivity(intent); } }else{ intent=newIntent(this,LoginBindRouter.class); startActivity(intent); } } } finish(); } /** * *@paramversiontext *当前客户端的版本号信息 *@return是否需要更新 */ privatebooleanisNeedUpdate(intversionCode){ try{ info=getUpdateApkInfo(); intlatestCode=info.getVersionCode();//这里info可以为空,会跳到异常处理里面 if(latestCode<=versionCode){ //Log.i("splashActivity","版本相同,无需升级,进入主界面"); returnfalse; }else{ //Log.i("splashActivity","版本不同,需要升级"); returntrue; } }catch(Exceptione){ e.printStackTrace(); //Log.i("splashActivity","获取更新信息异常,进入主界面"); returnfalse; } } publicintgetVerCode(){ intverCode=-1; try{ verCode=this.getPackageManager().getPackageInfo("com.holl.vwifi",0).versionCode; }catch(NameNotFoundExceptione){ e.printStackTrace(); } returnverCode; } /** *安装apk *@paramfile */ privatevoidinstall(Filefile){ Intentintent=newIntent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive"); finish(); startActivity(intent); } //检查版本更新 privateApkInfogetUpdateApkInfo(){ ApkInfoapkInfo=null; InputStreaminputStream=null; HttpURLConnectionconnection=null; try{ URLurl=newURL("http://www.holl.cn/APP/android/holl_smart.xml"); connection=(HttpURLConnection)url.openConnection();// connection.setRequestMethod("GET"); connection.setConnectTimeout(2000);//设置连接主机超时(单位:毫秒) connection.setReadTimeout(2000);//设置从主机读取数据超时(单位:毫秒) if(connection.getResponseCode()!=200){ returnapkInfo; } inputStream=connection.getInputStream(); XmlPullParserFactorypullParserFactory=XmlPullParserFactory.newInstance(); XmlPullParserparser=pullParserFactory.newPullParser(); parser.setInput(inputStream,"UTF-8");//编码 intevent=parser.getEventType();//产生第一个事件 while(event!=parser.END_DOCUMENT){ switch(event){ caseXmlPullParser.START_DOCUMENT: apkInfo=newApkInfo(); break; caseXmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件 StringtempParser=parser.getName(); if("name".equalsIgnoreCase(tempParser))//判断开始标签元素是否是CMD_RES { apkInfo.setName(parser.nextText()); } //开始解析XML elseif("version".equalsIgnoreCase(tempParser)){ apkInfo.setVersion(parser.nextText()); } elseif("versionCode".equalsIgnoreCase(tempParser)){ apkInfo.setVersionCode(Integer.parseInt(parser.nextText())); } elseif("desc".equalsIgnoreCase(tempParser)){ apkInfo.setDes(parser.nextText()); } elseif("url".equalsIgnoreCase(tempParser)){ apkInfo.setUrl(parser.nextText()); } caseXmlPullParser.END_TAG: break; } event=parser.next();//进入下一个元素并触发相应事件 } }catch(Exceptione){ e.printStackTrace(); apkInfo=null; }finally{ try{ if(inputStream!=null) inputStream.close(); if(connection!=null)connection.disconnect(); }catch(IOExceptione){ e.printStackTrace(); } } returnapkInfo; } /** *升级的对话框 */ privatevoidshowUpdataDialog(){ AlertDialog.Builderbuider=newBuilder(this); buider.setIcon(R.drawable.prompt); buider.setTitle("升级提醒"); buider.setMessage("汇尔微管家"+info.getVersion()+"发布了!\n"+"更新内容:"+info.getDes()); buider.setCancelable(false);//让用户不能取消对话框 buider.setPositiveButton("马上升级",newOnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){ //Log.i("splashActivity","下载apk文件"+info.getUrl()); if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ task=newDownLoadFileThreadTask(info.getUrl(),"/sdcard/holl/holl_smart.apk"); mHandler.sendEmptyMessage(1); }else{ Toast.makeText(getApplicationContext(),"sd卡不可用",Toast.LENGTH_SHORT).show(); } } }); buider.setNegativeButton("以后再说",newOnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){ //Log.i("splashActivity","用户取消进入程序主界面") } }); buider.create().show(); } privateclassDownLoadFileThreadTaskimplementsRunnable{ privateStringpath;//服务器路径 privateStringfilepath;//本地文件路径 publicDownLoadFileThreadTask(Stringpath,Stringfilepath){ this.path=path; this.filepath=filepath; } publicvoidrun(){ try{ Filefile=DownLoadFileTask.getFile(path,filepath,progressDialog); //Log.i("splashActivity","下载成功"); progressDialog.dismiss(); install(file); }catch(Exceptione){ e.printStackTrace(); mHandler.sendEmptyMessage(2);//"下载fail" } } } } 布局文件很简单
相关文章推荐
- android程序启动画面实现
- Android应用开发小随笔——应用启动画面屏的实现
- 【转】android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- Android实现启动画面
- android如何实现开机自动启动Service或app
- 【转】android如何实现开机自动启动Service或app
- Android启动画面的实现
- APP启动画面实现方式
- android如何实现开机自动启动Service或app(转)
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- Android启动画面实现
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- android如何实现开机自动启动Service或app
- Android启动画面实现