




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、宝贵建议请发送至: HYPERLINK mailto:wangzhenyang wangzhenyang HYPERLINK Copyright2014 黑马程序员版权所有- HYPERLINK 编程,始于黑马 Android课程同步笔记Alpha 0.01版 Android课程同步笔记Alpha 0.01版 HYPERLINK wangzhenyang By阳哥 看得懂、学得会、记得住 阳哥笔记-Android 技术支持:法师、老黄、阿琛、冯冯 HYPERLINK Copyright2014 黑马程序员版权所有 Android手机卫士-01Splash界面()1.1 Splash界面的作用1
2、、用来展现产品的Logo;2、应用程序初始化的操作;3、检查应用程序的版本;4、检查当前应用程序是否合法注册;1.2 Splash界面布局RelativeLayout 1.3动态获取应用程序版本在SplashActivity中的onCreate方法中调用getVersion方法,用于动态显示当前应用的版本信息。privateprivate String getVersion()try /通过PackageManager获取安装包信息PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),0);/
3、返回版本信息return packageInfo.versionName; catch (NameNotFoundException e) return ;1.4 链接服务器查看版本更新信息在程序启动的时候会链接服务器获取最新版本信息,然后将自己的版本跟从服务器获取的版本信息进行对比,如果不一致(有最新版本)则提示用户更新。注意:1、这里我们使用到了网络,因此要在清单文件中添加android.permission.INTERNET权限。2、因为访问网络是“耗时”过程,因此我们把检查版本更新业务要放在子线程中进行。privateprivate void checkUpdate()new Thre
4、ad(new Runnable() Overridepublic void run() Message message = Message.obtain();try URL url = new URL(getString(R.string.serverurl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setConnectTimeout(2000);connection.setReadTimeout(2000);connection.setRequestMethod(GE
5、T);connection.connect();int code = connection.getResponseCode();if (code=200) InputStream inputStream = connection.getInputStream();String string = StreamUtil.stream2String(inputStream);System.out.println(请求结果:+string);JSONObject json = new JSONObject(string);version = (String) json.get(version);dow
6、nloadurl = (String)json.get(downloadurl);description = (String)json.get(description);if (getVersion().equals(version) message.what = ENTER_HOME;elsemessage.what = SHOW_UPDATE;else message.what = SERVER_ERROR;message.obj = 获取更新失败:+code; catch (Exception e) System.out.println(获取更新失败:+e);message.what =
7、 NET_ERROR;message.obj = 获取更新失败:+e;finallyhandler.sendMessage(message);).start();1.5给Splash界面添加启动动画在onCreate方法中,给Splash界面添加启动画面。这里添加的是渐变动画,透明度从0到1渐变,时长500毫秒。AlphaAnimation AlphaAnimation alphaAnimation = new AlphaAnimation(0.f, 1.f);RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.
8、rl_root);alphaAnimation.setDuration(500);relativeLayout.startAnimation(alphaAnimation);1.6 升级应用程序当检查到有最新版本的时候,我们会提示用户是否升级,如果用户选择了升级那么我们将在线进行升级。升级代码如下。在下载应用的时候我们使用了第三方工具FinalHttp。privateprivate void showUpdateDialog()AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle(发现新版本);
9、builder.setMessage(已经发布新版本了,希望您能及时升级。);builder.setNeutralButton(升级, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) /升级FinalHttp http = new FinalHttp();http.configTimeout(1000);http.downl
10、oad(downloadurl, Environment.getExternalStorageDirectory()+/mobileSage2.0apk, new AjaxCallBack() OverrideOverridepublic void onFailure(Throwable t, int errorNo, String strMsg) super.onFailure(t, errorNo, strMsg);Toast.makeText(SplashActivity.this, 下载失败。, Toast.LENGTH_SHORT).show();enterHome();Overri
11、depublic void onLoading(long count, long current) tv_download_progress.setVisibility(View.VISIBLE);int progress = (int)(current*100/count);tv_download_progress.setText(下载进度:+progress+%);Overridepublic void onStart() super.onStart();Overridepublic void onSuccess(File t) installAPK(t););elseToast.make
12、Text(SplashActivity.this, sd卡不可用, Toast.LENGTH_SHORT).show(););builder.setPositiveButton(暂不升级, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss();enterHome(););builder.setOnCancelListener(new OnCancelListener() Overridepublic void onCancel(DialogInt
13、erface dialog) enterHome(););builder.show();private void installAPK(File file) Intent intent = new Intent();intent.setAction(ent.action.VIEW);intent.setDataAndType(Uri.fromFile(file), application/vnd.android.package-archive);startActivity(intent);注意:安装APK是通过一个隐式意图实现的。1.7两种上下文的区别对话框是Activity的一部分,对话框是
14、挂载在Activity上面的。如果Activity不存在,对话框就不能被创建。 Activity 实际上是应用程序context上下文的一个子集。getApplicationContext();生命周期长,只要应用还存活它就存在;this 生命周期短,只要Activity不存在了,系统就会回收;其中:getBaseContext(),getApplication(),getApplicationContext(); 都不能放在AlertDialog做上下文;getApplicationContext() 使用场景是比如频繁需要操作的数据库。 推荐用法:Activity.this。应用程序主界面
15、()应用程序的主界面采用9宫格的形式,通过GridView控件来实现。布局文件清单如下:? 界面效果图如下所示:2.1 自定义可以滚动的TextView控件定义一个文字可以滚动的Button示例如下:定义一个文字可以滚动的TextView,编写一个类FocusedTextView继承TextView类。覆写isFocused方法。publicpublic class FocusedTextView extends TextViewpublic FocusedTextView(Context context) super(context);public FocusedTextView(Conte
16、xt context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle);public FocusedTextView(Context context, AttributeSet attrs) super(context, attrs);Overridepublic boolean isFocused() return true;使用该控件时方法如下: 注意:这里的标签必须使用类全名。设置中心()3.1自定义设置中心的组合控件我们的设置中心如下实例图所示,设置中心的每一个Item都是自定义控件。我们这里首先制作“
17、设置自动更新”功能。该设置控制软件启动时是否要检查更新。进入设置中心需要在主界面给“设置中心”图标添加一个点击事件。当点击该“设置中心”的时候进入设置中心界面。在主HomeActivity中给GridView设置点击事件。点击不同的图标进入不同的功能界面。privateprivate GridView list_home;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.home_activity);list_home = (
18、GridView) findViewById(R.id.list_home);list_home.setAdapter(new HomeAdapter();list_home.setOnItemClickListener(new HomeItemClickListener();privateprivate class HomeItemClickListener implements OnItemClickListener Overridepublic void onItemClick(AdapterView parent, View view, int position, long id) s
19、witch (position) case 0:showPwdDialog();break;case 1:entryCallSMSSafe();break;case 2:entryAppManager();break;case 3:entryTaskManager();break;case 4:entryTraaficManager();break;case 5:entryAntiVirus();break;case 6:entryCleanCache();break;case 7:entryAtools();break;case 8:entrySetting();break;default:
20、break;创建SettingActivity类,并创建对应的布局文件。对于上图中的布局我们发现有很多功能相似的地方,比如每一个设置项的布局基本相同,都有CheckBox选项等,因此我们会将上面的每一个条目抽取成自定义控件。如果不抽取出自定义的布局,那么原始布局文件如下:? 我们针对上面的布局抽取出单独的自定义类SettingItemView。我们把该类放在com.itheima.mobileSafe.ui包下面。SettingItemView类继承RelativeLayout类。代码清单如下:publicpublic class SettingItemView extends Relativ
21、eLayout private CheckBox cb_status;private TextView tv_desc;private TextView tv_title;private String title;private String desc_on;private String desc_off;private void initView(Context context) RelativeLayout relativeLayout = (RelativeLayout) View.inflate(context, R.layout.setting_item, SettingItemVi
22、ew.this);cb_status = (CheckBox) relativeLayout.findViewById(R.id.cb_checked);cb_status.setClickable(false);tv_desc = (TextView) relativeLayout.findViewById(R.id.tv_desc);tv_title = (TextView) relativeLayout.findViewById(R.id.tv_tile);tv_title.setText(title);if(cb_status.isChecked()tv_desc.setText(de
23、sc_on);else tv_desc.setText(desc_off);public SettingItemView(Context context) super(context);initView(context);public SettingItemView(Context context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle);initView(context);/* * 该构造函数是在布局界面使用的 * attrs.getAttributeValue 方法的第一个参数是命名空间,命名空间大
24、的/apk/res/部分是参考的系统命名空间规则,后面跟上包名称 * 第二个参数是属性名称 */public SettingItemView(Context context, AttributeSet attrs) super(context, attrs);/获取布局中的title属性值title = attrs.getAttributeValue(/apk/res/com.itheima.mobileSafe, title);/获取当checkBox打开时对应的描述信息desc_on = attrs.getAttributeValue(/apk/res/com.itheima.mobileSafe, desc_on);/获取当checkBox关闭时对应的描述信息desc_off = attrs.getAttributeValue(/apk/res/com.itheima.mobileSafe, desc_off);/初始化控件initView(context);public void setChecked(boolean isChecked)cb_statu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专题14 资源、环境与国家安全2024年高考真题和模拟题地理分类汇编(含答案或解析)
- 重症肺炎的个性化护理
- 起水痘饮食护理及注意事项
- 2025年盐湖提锂技术成本优化与产能扩张产业生态构建研究报告
- 人教版九年级数学下册28.1.2-30°45°60°角的三角函数值【课件】
- 糖尿病护理病例查房
- 2025年文化产业金融政策解析:构建多元化融资体系研究报告
- 酒店某部门薪酬设计方案
- 2025年水性油墨市场环境分析
- 2025年中国标牌照明行业市场前景预测及投资价值评估分析报告
- 《国别和区域研究专题》教学大纲
- 2025年日历表含农历(2025年12个月日历-每月一张A4可打印)
- 《ESC血压升高和高血压管理2024指南》解读
- 学科竞赛在提升学生团队协作能力中的作用
- 《公共管理学基础》题库及答案
- 基本药物工作计划
- 2025年行政执法人员执法资格考试必考题库及答案(共232题)
- 2025手术室年度工作计划
- 《儿童文学》课件-图画书的概念
- 2025届高三语文专题复习:文言文阅读-实词的五种类型
- 土木工程CAD-终结性考核-国开(SC)-参考资料
评论
0/150
提交评论