学习资源:传智播客教学视频《手机安全卫士》(PS:感谢大神们的分享,期待成为大神的那天~~)
Splash页面功能需求:
1.获取软件的版本名,并将版本名显示到页面上
2.从服务器上获取JSON数据,通过最新版本名和当前版本名的对比,实现提示更新的功能
3.SPLASH页面至少要显示2秒
**获取版本名的功能**
private String getVersionName()
{
PackageManager manager = this.getPackageManager();
try
{
PackageInfoinfo=manager.getPackageInfo
(this.getPackageName(),0);
String versionName = info.versionName;
return versionName;
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}
return "";
}
**获取JSON数据的思路**
1.定义一个字符串常量JSON_URL来保存json数据的链接地址:
private static final String JSON_URL = "http://***.html"
2.通过HttpURLConnection对象来获取到json数据的字节流(网络操作要在子线程中进行):
URL url = new URL(JSON_URL);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(10000);
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
/*由于子线程无法对UI进行操作,因此,我们要创建一个Message对象,通过Handler的sendMessage(Message msg)和 handlerMessage()方法进行UI操作*/
Message msg = new Message();
int code = conn.getResponseCode();
if(code == 200)
{
//获取JSON数据的字节流
InputStream is = conn.getInputStream();
//接下来的操作:。。。
}
3.把字节流转换成字符串:(在开发中经常遇到,因此,在工程中创建一个Utils包,创建IOUtils工具类,把字节流转字符串的方法写在工具类中)
public class IOUtils
{
//由于IOUtils为工具类,因此,要将构造方法私有,防止其被实例化
private IOUtils(){}
//把字节流转换为字符串
public static String getTextByString(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = 0;
while((length = is.read(buffer)) != -1)
{
baos.write(buffer,0,length);
}
String text = baos.toString();
is.close();
baos.close();
return text;
}
}
4.读取JSON数据:
在服务器上,写一段JSON数据:
{"version":"2.2.1","description":"快来下载新版本吧!","apkurl":"http://192.168.1.101:80/haha.apk"}
读取JSON数据的操作:
(1)把字节流转换成字符串:
String jsonText = IOUtils.getTextByString(is);
(2)通过JSONObject来解析JSON数据:
JSONObject jsonObj = new JSONObject(jsonText);
String versionName = jsonObj.getString("version");
String description = jsonObj.getString("description");
String apkurl = jsonObj.getString("apkurl");
**比对JSON数据中的version值和当前版本名是否相同**
*如果相同则跳转到主页面,并销毁Splash页面:*
Intent intent = new Intent(this,HomeActivity.class);
startActivity(intent);
finish();
*如果不同则弹出对话框,确认“现在更新”还是“以后再说”*
AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);
builder.setTitle("软件更新");
builder.setMessage(description);
builder.setNegativeButton("立刻升级",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
/*要将界面上的"旋转"进度条隐藏,并显示“横向”进度条和一个TextView(用来动态显示下载进度的文本)*/
/*由于本人编程水平有限,暂时无法独立写出断点续传下载的功能,只能暂时借助afinal框架实现此功能。。。*/
}
});
builder.setPositiveButton("以后再说",new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
//取消对话框,并进入主页面
dialog.dismiss();
toHomeActivity();
}
});
builder.show();
**实现SPLASH页面至少停留两秒的功能:**
在程序开头的地方写下计时代码:
long start = System.currentTimeMillis();
在程序的末尾,写下计时代码:
“`
long endTime = System.currentTimeMillis();
long loadTime = endTime - startTime;
if(loadTime <= 2000)
{
Thread.sleep(2000-loadTime);
}
挖的坑(以后专门写文补上,补完加链接)
- GSON的方式解析JSON数据(据说难度不大,但是一直没看,这两天学习一下)
- 多线程下载和断点续传下载的原理和基本的思路、代码
- AsyncTask(这个看了一次没看懂,明后天的时候看一下,写出来)
- HttpClient(有一些API没有看明白,准备看一下)
- -
今天是2015年7月22日,北漂的第五天,由于没有像样的作品而迟迟不敢投简历。。。心情和外面的天气一样充满了阴霾,加油,加油,加油!!