package cn.jianhaozhan.activity;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import org.json.JSONException;
import org.json.JSONObject;
import cn.jianhaozhan.utils.StreamUtil;
import android.support.v7.app.ActionBarActivity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class SplashActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_main);
TextView tv_spalsh_versionname=(TextView) findViewById(R.id.tv_spalsh_versionname);
tv_spalsh_versionname.setText("版本号:"+getVersionName());
update();
}
/**
* 获取当前应用版本号
* @return
*/
private String getVersionName(){
//包管理者
PackageManager pm=getPackageManager();
//packageName 应用程序包名
//flags 执行信息的标签,0:获取基础信息,包名,版本号,要获取的权限
try {
//pm.getPackageInfo("cn.jianhaozhan.activity", 0);
//getPackageName获取包名
//info命名的其实就是个javabean
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
//获取版本号
String versionName = packageInfo.versionName;
return versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 提醒用户版本更新
*/
private void update(){
new Thread(){
private String code;
private String apkurl;
private String des;
public void run(){
//1.1连接服务器
try {
//1.1.1 连接路径
URL url=new URL("http://jianhaozhan.cn/updateinfo.html");
//1.1.2获得连接对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//1.1.2设置超时时间
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
//设置请求方式
conn.setRequestMethod("GET");
//获取状态码
int responseCode = conn.getResponseCode();
if(responseCode == 200){
//连接成功,获取服务器返回的数据code:新版本的版本号,新版本的下载路径,告诉用户增加了哪些功能
System.out.println("连接成功");
//获取服务器返回的数据,得到服务器返回的流信息
InputStream inputStream = conn.getInputStream();
//将服务器返回的流信息转换成字符串
String json = StreamUtil.parseStremUitl(inputStream);
//解析json数据
JSONObject jsonObject=new JSONObject(json);
code = jsonObject.getString("code");
apkurl = jsonObject.getString("apkurl");
des = jsonObject.getString("des");
System.out.println(code+" "+apkurl+" "+des);
}else{
System.out.println("连接失败");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
}
package cn.jianhaozhan.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
public class StreamUtil {
/**
* 将流信息转换成字符串
*
* @return
* @throws IOException
*/
public static String parseStremUitl(InputStream in) throws IOException {
// 读取流转字符到br,这里是将读取的流存储到br
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// 上面已经已字符方式存储读取的流到br,现在写入流
//StringWriter字符串流写入,直接写入到sw
//BufferWriter是有缓冲的写入,不能一次写入
StringWriter sw = new StringWriter();
// 数据缓冲区
String str = null;
while ((str = br.readLine()) != null) {
//写入流到sw
sw.write(str);
}
sw.close();
br.close();
//现在转换好的流就在sw里面了。
//为什么读取的不能用,因为读取的虽然是字符但还不是字符串?字符数组和字符串还是有区别的?读取流的时候不能直接转字符串?
//读取流是读取到一个内存对象中存储br,写入流也是写到一个内存对象sw中,在写入的时候转成了字符串需要的。
return sw.toString();
}
}