软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很流行使用Splash界面, 正好与自动更新配套在一起;
在这个自动更新Splash中, 使用到了 动画设置 ,SharedPerference ,pull解析 ,dialog对话框 ,http网络编程 ,handler 等.
注意一个错误 : 已安装具有该名称和不同签名的数据包 , 早上测试人员报告突然出现这个问题, 在开发的时候我直接将eclipse上编译的版本放到了服务器上, 最后出现了这个问题, 开发的时候明明是好的啊, 怎么测试的时候出问题了呢.
编译环境不同, 产生的签名是不一样的, 在eclipse上编译生成 与 正式版本在linux下编译 所产生的 数字签名 是不一样的.
又发现一个BUG : 在弹出更新对话框, 点击确定下载完毕之后会弹出系统自带的替换应用程序对话框, 在这里点取消的话就会一直卡在Splash界面. 设置一个跳转机制解决这个问题.
解决方案 :利用触摸划屏事件, 向左侧划屏100px, 就自动跳转到主界面 , 最后的最终代码已经加上去了
/** * 设置触摸事件 * 在手指按下时记录x坐标值 , 在手指抬起的时候记录x坐标值 , 如果两个值相差超过100 * 那么跳转到主界面 * @see android.app.Activity#onTouchEvent(android.view.MotionEvent) */ @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN : touchPositionX0 = (int) event.getX(); break; case MotionEvent.ACTION_UP : touchPositionX1 = (int) event.getX(); if((touchPositionX0 - touchPositionX1) > 100) loadMainUI(); touchPositionX0 = 0; touchPositionX1 = 0; break; } return true; }
一. 创建Activity
1. 创建Activity大概流程
a. 设置全屏显示.
b. 设置布局, 并在布局中显示当前版本号, 为Splash界面添加动画.
c. 获取当前时间.
d. 获取SharedPerence配置文件.
e. 开启检查版本号线程, 后续的操作都在这个线程中执行.
2. 设置窗口样式
(1) 设置全屏显示
a. 代码实现 : 由于是Splash界面, 这里需要设置成无标题, 并且全屏显示, 注意下面的两行代码需要在setContentView()方法之前调用;
//隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
b. 配置实现 :
AndroidManifest.xml <activity android:name="myAcitivty" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
(2) 关于窗口的其它设置
//①设置窗体始终点亮 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//②设置窗体始终点亮 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
设置窗体始终点亮的配置文件实现
//③AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.WAKE_LOCK" />
//设置窗体背景模糊 getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
(3) 屏幕方向设置
a. 配置文件实现
/
/设置横屏 <activity android:name="myAcitivty" android:screenOrientation="landscape" /> //设置竖屏 <activity android:name="myAcitivty" android:screenOrientation="portrait" />
b. 代码实现
//设置横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //设置竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
c. 获取屏幕方向
//获取横屏方向 int orientation = this.getResources().getConfiguration().orientation; 其中的orientation方向可以使 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 或者 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE .
3. 设置动画
为了更好的用户体验, 这里给Splash界面添加一个动画, 这个动画加给整个界面.
(1) 创建动画
AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f); //创建动画 animation.setDuration(2000); //设置渐变 splash_rl.setAnimation(animation); //设置动画载体
创建动画吧: 创建的这个动画是透明度渐变动画, 传入浮点型参数, 0代表完全透明, 1代表不透明, 传入参数代表透明度从完全透明到不透明.
设置时间 : 设置的duration是动画渐变过程所消耗的时间.
设置动画 : 最后使用setAnimation()方法将穿件的动画设置给Splash界面.
(2) 动画常用方法
a. 普通设置
alphaAnimation.setRepeatCount(5);//设置重复次数 alphaAnimation.setFillAfter(true);//动画执行完是否停留在执行完的状态 alphaAnimation.setStartOffset(1000);//动画执行前等待的时间, 单位是毫秒 alphaAnimation.start();//开始动画
b. 设置监听器
alphaAnimation.setAnimationListener(new AnimationListener() { //动画开始时回调 @Override public void onAnimationStart(Animation animation) { } //动画重复执行时回调 @Override public void onAnimationRepeat(Animation animation) { } //动画执行结束时回调 @Override public void onAnimationEnd(Animation animation) { } });
4. SharedPerference使用
//获取SharedPerference SharedPreferences sharedPreferences = getSharedPreferences("sp", Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); //获取Editor对象 editor.putBoolean("isUpdate", true); //向sp中写入数据 editor.commit(); //提交 sharedPreferences.getBoolean("isUpdate", true);//获取sp中的变量
5. onCreate()方法代码