Splash界面
Splash界面的作用
1、展示产品的logo,提升产品的知名度
2、初始化应用程序的操作(读取配置文件,初始化数据库) 3、产品的注册校验,检查是否有新的版本 alt+shift+s R 生成Getter和Setter方法 |
1、id命名规则 组件名缩写-Activity名-功能 android:id="@+id/tv_splash_version" 显示版本信息 2、获取版本号,从AndroidManifest.xml中获取 // 1、获取包管理者
PackageManager packageManager = this.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(this.getPackageName(), 0);// 参数2,可选
// PackageInfo 就相当于AndroidManifest.xml文件
// 2、获取应用程序versionName
appVersion = packageInfo.versionName;
application节点下: android:theme="@android:style/Theme.NoTitleBar" 没有标题栏 |
4、从服务器上下载版本更新信息,用子线程 /**
* TODO SplashActivity 2、开启子线程从服务器上获取最新的版本信息
*/
private class CheckVersionTask implements Runnable {
@Override
public void run() {
Message msg = new Message();
try {
// 1、通过从config.xml文件中获取path路径,封装成URL对象
URL url = new URL(getApplicationContext().getResources().getString(R.string.urlPath));
// 2、开启http请求连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 3、设置请求参数
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
// 4、获取服务器返回码
int responseCode = conn.getResponseCode();
if (responseCode == 200) {// 4-1如果是200
// 4-1-1得到服务器返回的io流
InputStream inputStream = conn.getInputStream();// 返回的是一个版本号xml文件
updateInfo = UpdateInfoParse.getUnpdateInfo(getApplicationContext(),inputStream);
if (updateInfo!=null) {
msg.what = PARSE_SUCCESS;
// handler.sendMessage(msg);//不要重复发送,否则会出现黑屏,后面的finally会发送消息
return;
}else {
msg.what = PARSE_ERROR;
return;
}
} else {// 4-2如果不是200
msg.what = SERVER_RESPONSE_ERROR;
}
} catch (MalformedURLException e) {
e.printStackTrace();
// url地址不正确,SERVER_ERROR
msg.what = SERVER_ERROR;
} catch (IOException e) {
// IO_ERROR
e.printStackTrace();
msg.what = IO_ERROR;
} finally {
// 5、发送信息,不要重复发送,否则会出现黑屏
handler.sendMessage(msg);
}
}
}
|
5、对于异常,对于是自己的产品,要将每个异常给处理掉,给用户友好的提示,用消息机制 public static final int PARSE_SUCCESS = 11;
public static final int PARSE_ERROR = 10;
public static final int URL_ERROR = 20;
public static final int SERVER_RESPONSE_ERROR = 30;
public static final int IO_ERROR = 40;
protected static final String TAG = "SplashActivity";
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case URL_ERROR:
Toast.makeText(SplashActivity.this.getApplicationContext(),
"服务器错误了,URL地址不对", Toast.LENGTH_SHORT).show();
break;
case IO_ERROR:
Toast.makeText(SplashActivity.this.getApplicationContext(),
"连接服务器异常。", Toast.LENGTH_SHORT).show();
break;
case SERVER_RESPONSE_ERROR:
Toast.makeText(SplashActivity.this.getApplicationContext(),
"服务器响应失败", Toast.LENGTH_SHORT).show();
break;
case PARSE_SUCCESS:
Log.i(TAG, "解析版本更新xml成功~~~,当前最新版本为:" + updateInfo.getVersion());
// 比对当前客户端的版本号和服务器的版本号是否一致.
if (getAppVersion().equals(updateInfo.getVersion())) {// 没有新版本
Log.i(TAG, "版本一致。直接登录");
} else {// 有新版本
Log.i(TAG, "有新版本,提示用户下载");
}
break;
case PARSE_ERROR:
Log.i(TAG, "解析版本更新xml失败!!!");
break;
}
}
};
|
六、使用pull解析xml /**
* 1、 根据传入的xml的io流,解析出来里面的信息,并返回给客户
*
* @param inputStream 传入的xml文件
* @return 返回UpdateInfo,如果返回null,解析失败。
*/
public static UpdateInfo getUnpdateInfo(Context context,InputStream inputStream) {
try {
// 1、得到一个pull解析器
XmlPullParser pullParser = Xml.newPullParser();
// 2、初始化pull解析器
pullParser.setInput(inputStream, context.getResources().getString(R.string.xmlEncode)); // FIXME UpdateInfoParse 1、应该将编码encode配置的xml文件中去
// 3、得到解析事件
int eventType = pullParser.getEventType();
// 4、循环遍历解析
UpdateInfo updateInfo = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagName = pullParser.getName();// 返回节点名字
switch (eventType) {
case XmlPullParser.START_TAG:
if ("info".equals(tagName)) {// 4-1开始解析info节点,new UpdateInfo()对象。
updateInfo = new UpdateInfo();
} else if ("version".equals(tagName)) {
String version = pullParser.nextText();
updateInfo.setVersion(version);
} else if ("description".equals(tagName)) {
String description = pullParser.nextText();
updateInfo.setDescription(description);
} else if ("path".equals(tagName)) {
String urlPath = pullParser.nextText();
updateInfo.setUrlPath(urlPath);
}
break;
case XmlPullParser.END_TAG:
break;
}
eventType = pullParser.next();
}
// 5、返回解析到的对象
return updateInfo;
} catch (XmlPullParserException e) {// 由于有返回值,所以这里可try{}catch{}住
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
|