Android 一个欢迎页面应该干些什么?
2016-07-05 08:49
441 查看
玩过很多android的应用,发现刚打开使用的时候都会只有一个显示几秒钟的欢迎页面,展示应用的一些信息。但是你知道这短短的几秒钟它到底干了些什么么?
下面我来说一下我所知道的:
一、版本更新。
在这页面存在的时间,我们会向服务器获取信息,判断当前应用的版本与服务器的版本是否一致,如何不一致的话,就会弹出是否更新的对话框。
首先给我们得到当前版本的版本号:
得到了当前的包信息,我们就要与获取服务器的版本号,判断是否一致了(服务器无非就是返回一串json数据,里面包含版本号,下载地址而已)。请求服务器我就在这里不细讲,又不懂的童靴留言。
当我们请求到了服务器之后,就发送信息让handler执行相应的操作,因为网络请求输入耗时操作,不可以在主线程,所以新开一个子线程,子线程不可以修改UI,所以让handler处理。如何版本号一致那就不需要更新,如果不一致的话。:
我们就弹出一个对话框,让用户选择,这里我就简单弹出一个较丑的对话框了:
进入主页面的代码(LoadMainUI()):
执行下载操作的代码(downloadNews):
这里我采用github上的开源框架xUtils,里面封装了上传,下载,请求等等的方法。下面给个地址去下载,有说明文档,而且还是中文的哟。https://github.com/wyouflf/xUtils 可能有新的班的,但是仓库地址不一样,它上面有说明。
可以看到,获取了HttpUtil对象,调用download方法第一个就是我们的下载地址,上面我们请求服务器的时候已经把下载地址也获取到了的。第二个就是下载的保存路径,第三个参数就是一个请求回调了,OnLoading()表示正在下载,OnSuccess()表示下载成功,OnFailure()表示下载失败。在OnSuccess回调方法了,我们肯定下载完成后安装的了。所以就启动了系统的安装界面。
更新版本已经完成了。接下来就要对数据进行处理了;
二、资源数据的处理
我们的做项目的时候,还有一些外部数据库获着其他文件。是存放在assets目录下的,但是我们怎么访问呢?这就要在我们的初始化界面里把相应的资源拷贝到SD卡下面了:
因为是耗时操作,所以我们要在子线程中执行:
这里就不展开讲了,很简单的文件操作。
我们只需要把assets下的想要操作文件的文件名传进去就行了。
在这里我就简单的用了一两个常用的操作更大家讲解,具体还有其它的操作就要看项目的需求了。
下面我来说一下我所知道的:
一、版本更新。
在这页面存在的时间,我们会向服务器获取信息,判断当前应用的版本与服务器的版本是否一致,如何不一致的话,就会弹出是否更新的对话框。
首先给我们得到当前版本的版本号:
<span style="white-space:pre"> //首先得到包管理器packageManager private PackageManager packageManager= getPackageManager(); //利用包管理器拿到包信息 PackageInfo packinfo = packageManager.getPackageInfo(getPackageName(), 0); //得到包信息就可以获取包名和版本号了 String versionName = packinfo.versionName; int versionCode = packinfo.versionCode;</span>
得到了当前的包信息,我们就要与获取服务器的版本号,判断是否一致了(服务器无非就是返回一串json数据,里面包含版本号,下载地址而已)。请求服务器我就在这里不细讲,又不懂的童靴留言。
当我们请求到了服务器之后,就发送信息让handler执行相应的操作,因为网络请求输入耗时操作,不可以在主线程,所以新开一个子线程,子线程不可以修改UI,所以让handler处理。如何版本号一致那就不需要更新,如果不一致的话。:
我们就弹出一个对话框,让用户选择,这里我就简单弹出一个较丑的对话框了:
case SHOW_UPDATE_DIALOG: AlertDialog.Builder builder = new Builder(SplashActivity.this); builder.setTitle("更新提醒"); builder.setMessage(desc); /** * 对话框被取消事件 */ builder.setOnCancelListener(new OnCancelListener() { public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub //该方法是进入主页面的方法,应使用次数过多,所以封装起来,在下面我会贴出来 LoadMainUI(); } }); builder.setPositiveButton("立即更新", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { System.out.println("下载"+downloadurl); downloadNews(downloadurl);//这里执行下载操作。 } }); builder.setNegativeButton("下次再说", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub LoadMainUI(); } }); builder.show(); break;
进入主页面的代码(LoadMainUI()):
/** * 进入主界面UI的方法downloadNews * @param LoadMainUI */ public void LoadMainUI() { Intent intent = new Intent(SplashActivity.this,HomeActivity.class); startActivity(intent); finish(); }
执行下载操作的代码(downloadNews):
这里我采用github上的开源框架xUtils,里面封装了上传,下载,请求等等的方法。下面给个地址去下载,有说明文档,而且还是中文的哟。https://github.com/wyouflf/xUtils 可能有新的班的,但是仓库地址不一样,它上面有说明。
<span style="font-size:18px; white-space: pre;"> </span><span style="font-size:18px;">private void downloadNews(String downloadurl) { // TODO Auto-generated method stub HttpUtils http = new HttpUtils(); final Message msg = Message.obtain(); http.download(downloadurl, "/storage/sdcard/temp.apk",true,new RequestCallBack<File>() { @Override public void onFailure(HttpException arg0, String arg1) { // TODO Auto-generated method stub UIUtils.showToast(SplashActivity.this, "下载失败"+arg1); tv_download.setText("下载失败"+arg1); msg.what = LOAD_MAINUI; arg0.printStackTrace(); handler.sendMessage(msg); } @Override public void onSuccess(ResponseInfo<File> arg0) { // TODO Auto-generated method stub\ System.out.println("安装"+Environment.getExternalStorageDirectory()+"/.temp.apk"); /** * 下载完成后事变激动安装 */ Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(new File("/storage/sdcard/temp.apk","")), "application/vnd.adroid.package-archive" ); startActivityForResult(intent, 0); //intent.setAction(); } @Override public void onLoading(long total, long current, boolean isUploading) { // testTextView.setText(current + "/" + total); tv_download.setText("正在下载"+current+"/"+total); } }); }</span>
可以看到,获取了HttpUtil对象,调用download方法第一个就是我们的下载地址,上面我们请求服务器的时候已经把下载地址也获取到了的。第二个就是下载的保存路径,第三个参数就是一个请求回调了,OnLoading()表示正在下载,OnSuccess()表示下载成功,OnFailure()表示下载失败。在OnSuccess回调方法了,我们肯定下载完成后安装的了。所以就启动了系统的安装界面。
更新版本已经完成了。接下来就要对数据进行处理了;
二、资源数据的处理
我们的做项目的时候,还有一些外部数据库获着其他文件。是存放在assets目录下的,但是我们怎么访问呢?这就要在我们的初始化界面里把相应的资源拷贝到SD卡下面了:
因为是耗时操作,所以我们要在子线程中执行:
/** * 拷贝资产目录下的数据库文件 * @param string */ private void copyDB(final String string) { new Thread(){ public void run() { try { File file = new File(getFilesDir(),string); if (file.exists()&&file.length()>0) {//如果文件存在就不复制了 System.out.println("文件已经存在,不需要复制了"); return; } InputStream is=getAssets().open(string); FileOutputStream fos=openFileOutput(string, MODE_PRIVATE);//直接打开一个文件输出流 byte[] buffer = new byte[1024]; int length = 0; while((length=is.read(buffer))!=-1) { fos.write(buffer, 0, length); } fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); }
这里就不展开讲了,很简单的文件操作。
我们只需要把assets下的想要操作文件的文件名传进去就行了。
在这里我就简单的用了一两个常用的操作更大家讲解,具体还有其它的操作就要看项目的需求了。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories