上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.1.1 Splash界面的UI开发
在activity_splash.xml中实现Splash界面的UI展示。Splash界面的效果是:将图片logo2复制到drawable下作为界面的背景图片,在界面的右上角展示当前应用的版本号信息,在界面的中央显示一个 ProgressBar。另外该界面在屏幕上显示时无标题栏且全屏显示(这里是在SplashActivity中实现该设置的,当然也可以在清单文件中配置)。效果图如图1-5所示。
图1-5
图1-5对应的activity_splash.xml的UI界面代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SplashActivity" android:id="@+id/rl_splash" android:background="@drawable/logo2" > <TextView android:id="@+id/tv_splash_version" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="版本号:" android:textColor="#0aff00" android:textSize="20sp" /> <ProgressBar android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_marginBottom="110dip"
android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
图1-5对应的SplashActivity业务代码如下:
package com.guoshisp.mobilesafe; import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.TextView; public class SplashActivity extends Activity { private TextView tv_splash_version; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置为无标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); //设置为全屏模式 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_splash); tv_splash_version = (TextView) findViewById(R.id.tv_splash_ version); tv_splash_version.setText("版本号:" + getVersion()); } /** * 获取当前应用程序的版本号 * * @return */ private String getVersion() { //得到系统的包管理器,已经得到了apk的面向对象的包装 PackageManager pm = this.getPackageManager(); try { //参数一:当前应用程序的包名;参数二:可选的附加消息,这里用不到,可以定义为0 PackageInfo info = pm.getPackageInfo(getPackageName(), 0); //返回当前应用程序的版本号 return info.versionName; } catch (Exception e) {//包名未找到异常,理论上,该异常不可能会发生 e.printStackTrace(); return ""; } } }
代码解析:
通过调用getVersion()方法来获取应用程序的版本号信息。版本号存在于我们的apk对应的清单文件中(直接解压 apk 后,即可看到对应的清单文件),版本号是 manifest 节点中的android:versionName="1.0"。当一个应用程序被装到手机后,该apk被复制到手机的data/app目录下(也就是系统中),如图1-6所示。所以想得到版本号,就需要先得到与系统相关的服务(这里我们通过上、下文得到PackageManager系统服务),通过服务就可以得到apk中的信息。
图1-6