您的位置:首页 > 移动开发

Android app 启动画面实现

2014-10-30 15:22 246 查看
1.直接上代码

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"
}
}
}

}

布局文件很简单


<?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>


  


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: