Android智能电视APP开发笔记(一)
- 格式:doc
- 大小:1.04 MB
- 文档页数:20
android核心知识点笔记Android核心知识点笔记一、Android基础知识1. Android的发展历程- Android是由Andy Rubin创建的一个开放源代码的移动操作系统,2003年创建,2005年被Google收购,2008年首次推出。
- Android的发展经历了不断的版本迭代,包括Cupcake、Donut、Eclair、Froyo、Gingerbread、Honeycomb、Ice Cream Sandwich、Jelly Bean、KitKat、Lollipop、Marshmallow、Nougat、Oreo、Pie等。
- Android的版本迭代主要包括增加新功能、优化性能、改进用户界面等方面的改动。
2. Android应用的开发流程- Android应用的开发包括需求分析、设计界面、编写代码、调试、测试和发布等阶段。
- 需求分析阶段是确定应用的功能和界面设计的重要阶段,可以根据用户需求绘制原型图、进行用户调研等。
- 设计界面阶段包括绘制应用的界面布局、设计图片资源等。
- 编写代码阶段是根据需求和设计完成应用的逻辑和功能代码的编写,可以使用Java语言和Android SDK提供的API。
- 调试阶段是通过模拟器或真机进行应用的调试和测试,可以检查代码逻辑和界面的运行情况。
- 测试阶段是进行全面的功能测试、性能测试和兼容性测试,确保应用在各种设备上都能正常运行,并修复可能存在的Bug。
- 发布阶段是将应用打包成APK文件并上传到应用商店,供用户下载和安装使用。
3. Android应用的架构- Android应用的架构包括四个主要组件:Activity、Service、Broadcast Receiver和Content Provider。
- Activity是Android应用的界面显示和用户交互的主要组件。
- Service是一个可以在后台运行的组件,可以执行一些长时间运行的任务,如音乐播放、网络下载等。
Android应用开发基础学习第一章:Android应用开发基础概述在移动互联网时代,Android操作系统成为了最为流行的移动操作系统之一。
Android应用开发是当前热门的技术领域,具备了丰富的就业机会和发展前景。
本章将介绍Android应用开发的基础概念和发展背景,为后续章节做铺垫。
1.1 Android应用开发的定义Android应用开发是使用Android开发工具集(SDK)及相关技术,为Android手机、平板电脑等设备开发应用软件的过程。
Android应用开发使用Java作为主要编程语言,采用面向对象的开发方式。
1.2 Android操作系统的发展历程Android操作系统由谷歌公司开发,并于2007年首次发布。
随着智能手机的普及和用户对移动应用需求的增加,Android应用市场逐渐壮大。
目前,Android操作系统已经成为全球市场份额最大的移动操作系统。
第二章:Android开发环境搭建在进行Android应用开发之前,需要先正确搭建开发环境。
本章将介绍Android开发环境的搭建步骤,并详细说明其中涉及的关键概念和技术。
2.1 安装Java开发工具(JDK)Android应用开发需要运行在Java虚拟机上,因此需要先安装Java开发工具。
可以从Oracle官方网站下载并安装最新版本的JDK。
2.2 下载和安装Android StudioAndroid Studio是官方推荐的Android应用开发IDE(集成开发环境),包含了一系列开发所需的工具和库。
可以从谷歌官方网站下载并安装Android Studio。
2.3 创建Android项目在Android Studio中,可以通过向导式操作创建新的Android项目。
需要设置项目名称、包名、目标设备等信息,并选取适合的最低API版本。
第三章:Android应用开发基础本章将介绍Android应用开发的基础知识和核心技术。
通过学习本章内容,读者将了解Android应用的基本组成结构,以及如何使用Android SDK进行应用开发。
【济南中心】Android课程同步笔记day01:Android应用之安全卫士代码的组织方式:- 业务逻辑模块组织代码小米阅读1. 阅读器reader com.xiaomi.reader2. 分享share com.xiaomi.share3. 便签note com.xiaomi.note- 根据代码的类型组织包结构1. 界面com.itheima.mobilesafe.activities2. 服务com.itheima.mobilesafe.services3. 业务逻辑com.itheima.mobilesafe.engine4. 数据库com.itheima.mobilesafe.db5. 数据库增删改查com.itheima.mobilesafe.db.dao6. 工具类com.itheima.mobilesafe.utils7. 自定义view com.itheima.mobilesafe.uisplash界面的作用:1. 展现产品的logo,提升产品的知名度.2. 初始化应用程序的数据.3. 连接服务器,查找可更新的版本,自动更新4. 用户操作指南5. 新版本特性提醒布局文件的命名规则:SplashActivity--->activity_spalsh.xmlXxxActivity---> activity_xxx.xml获取应用程序版本号://用PackageManager拿到PackageInfo,PackageInfo中的versionNamePackageInfo packinfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);String version = packinfo.versionName;源代码版本控制:- 安装VisualSVN Server——SVN服务器,一直下一步即可- 导入仓库到服务器1.在Repositories处右键,选择Import Existing Repository2.选择Copy repository from another location,下一步3.点击Browse,选择仓库路径,"代码/代码仓库/Repository/mobilesafe",点击下一步4.点击Import5.点击Finish,导入完成- 安装TortoiseSVN——SVN客户端,一直下一步即可1.在想要检出代码的地方右键,选择SVN Checkout2.URL of repository处填https://127.0.0.1/svn/mobilesafe/,地址也可以从SVN服务器的mobilesafe处右键选择Copy URL to clipboard拷贝3.Checkout directory出填写检出代码要放的位置,然后点击OK4.完成代码的检出- 将代码更新到指定版本1.mobilesafe文件夹出右键,选择Update to version2.点击show log3.点击左下角的show all4.选择要更新的版本,点击OK5.版本更新完成应用自动更新的逻辑图:获取服务器版本号://获取服务器地址String path = getResources().getString(R.string.url);URL url = new URL(path);//创建网络连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);//发出请求,获得返回码int code = conn.getResponseCode();if(code ==200){//获取服务器返回的流并进行解析InputStream is = conn.getInputStream();String result = StreamTools.readStream(is);//转化为json并解析出版本号JSONObject json = new JSONObject(result);String serverVersion = json.getString("version");Log.i(TAG,"服务器版本:"+serverVersion);}将流转化为字符串:public static String readStream(InputStream is) throws IOException{//ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte 型数组的缓冲区,缓冲区会随着数据的不断写入而自动增长。
Android 开发简介简介黑莓和iPhone 都提供了受欢迎的、高容量的移动平台,但是却分别针对两个不同的消费群体。
黑莓是企业业务用户的不二选择。
但是,作为一种消费设备,它在易用性和“新奇特性”方面难以和iPhone 抗衡。
Android 则是一个年轻的、有待开发的平台,它有潜力同时涵盖移动电话的两个不同消费群体,甚至可能缩小工作和娱乐之间的差别如今,很多基于网络或有网络支持的设备都运行某种Linux 内核。
这是一种可靠的平台:可经济有效地进行部署和提供支持,并且可直接作为面向部署的良好的设计方法。
这些设备的UI 通常是基于HTML 的,可通过PC 或Mac 浏览器查看。
但并不是每个设备都需要通过一个常规的计算设备来控制。
想象一下传统的家用电器,例如电炉、微波炉或面包机。
如果您的家用电器由Android 控制,并且有一个彩色触摸屏,会怎么样?如果电炉上有一个Android UI,那么操控者甚至可以烹饪点什么东西。
在本文中,了解Android 平台,以及如何将它用于移动和非移动应用程序。
安装Android SDK,并构建一个简单的应用程序。
Android 简史Android 平台是Open Handset Alliance 的成果,Open Handset Alliance 组织由一群共同致力于构建更好的移动电话的公司组成。
这个组织由Google 领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。
从软件开发的观点看,Android 正处在开源领域的中心位置。
市场上第一款支持Android 的手机是由HTC 制造并由T-Mobile 供应的G1。
这款设备从设想到推出花了大约一年的时间,惟一可用的软件开发工具是一些实行增量改进的SDK 发行版。
随着G1 发行日的临近,Android 团队发布了SDK V1.0,用于这个新平台的应用程序也浮出水面。
为了鼓励创新,Google 举办了两届“Android Developer Challenges”,为优胜的参赛作品提供数百万美金的奖励。
android移动应用开发技术课第一章笔记第一章:Android移动应用开发技术课笔记一、引言在当今移动互联网时代,Android系统以其开放性和普及率成为了最受欢迎的移动操作系统之一。
随着移动应用市场的不断扩大,对Android移动应用开发技术的需求也日益增加。
学习和掌握Android移动应用开发技术成为了越来越多人的选择。
二、Android移动应用开发技术概述1. 什么是Android?Android是一款基于Linux操作系统的开源移动设备操作系统,主要用于触摸屏移动设备,如智能手机和平板电脑。
Android操作系统的开放性使得开发者可以自由定制和开发应用,受到了广大用户的喜爱。
2. Android移动应用开发技术的重要性随着信息化和数字化的发展,移动应用成为了人们获取信息和进行交流的重要方式。
而Android作为最主流的移动操作系统之一,其应用的开发和推广具有巨大的市场潜力和商业价值。
掌握Android移动应用开发技术成为了许多开发者和从业者的追求目标。
三、学习Android移动应用开发技术的重要性1. 对于个人的意义学习Android移动应用开发技术可以提升个人的职业技能,并且在移动应用开发领域有更多的发展机会。
可以通过开发自己的应用来实现个人价值和创造财富。
2. 对于企业的意义随着移动互联网的发展,各类企业都希望拥有自己的移动应用,以提升品牌形象和服务用户。
懂得Android移动应用开发技术的人才对企业来说显得格外宝贵。
四、学习Android移动应用开发技术的途径1. 自学通过阅读相关书籍、网上教程和参加线上培训班,可以自学Android 移动应用开发技术。
这种方式需要具备较好的自学能力和毅力。
2. 参加培训班选择权威的培训机构进行系统的学习和培训,可以更快速、系统地学习Android移动应用开发技术。
五、Android移动应用开发技术的未来发展随着人工智能、物联网、区块链等技术的不断发展,Android移动应用开发技术也将不断拓展应用场景和技术深度。
Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式一.序作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity 中文翻译过来就是”活动”的意思,但是主席觉得这样翻译有些生硬,直接翻译成“界面”可能更好,的确,Activity主要也是用于UI效果的呈现,不过两者翻译都不为过,我们知其意就行了,正常情况下,我们除了Window,Dialog,Toast,我们还能见到的就只有Activity 了,他需要setContentView()去绑定一个视图View作为效果的呈现,然而,作为一本高质量的进阶书。
肯定不会去围绕着入门知识讲解,本章的侧重点在于对Activity使用过程中搞不清楚的概念,生命周期和启动模式已经IntentFilter的匹配规则分析,毕竟Activity在异常状态下的生命周期是多样化的,至于Activity的启动模式和各种各样的Flags,更是让很多人摸不着头脑,还有隐式启动Activity中也有着复杂的Intent匹配过程,所以我们还是一步步的去学习下去,真正的了解Activity这个小家伙!二.Activity的生命周期全面分析Activity的生命周期,本章主要讲解两个方面典型情况下的生命周期异常情况下的生命周期典型情况是指用户参与的情况下,Activity所经过的生命周期的变化,异常情况下的话,就有多种可能了,比如系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建,异常情况下的生命周期的关注点和典型情况下有些不同,所以要分开来描述才能描述的清楚些1.典型情况下的生命周期分析在正常的情况下,生命周期会经历以下的生命周期onCreate:表示Activity正在被创建,这是生命周期的第一个方法,在这个方法中,我们可以做一些初始化的工作,比如调用onContentView去加载界面布局资源,初始化Activity所需数据等onRestart:表示Activity正在重新启动,一般情况下,当当前Activity从不可见重新变为可见时,onRestart就会被调用,这总情况一般是用户行为所导致的,比如用户按home键切换到桌面或者用户打开了一个新的Activity,这时当前的Activity就会被暂停,也就是onPause 和onStop方法被执行了,接着用户又回到了这个Activity,就会出现这种情况onStart:表示Activity正在被启动,即将开始,这个时候Activity已经可见了,但是还没有出现在前台,还无法和用户交互,这个时候我们可以理解为Activity已经启动了,但是我们还没有看见onResume:表示Activity已经可见了,并且出现在前台,并开始活动了,要注意这个和onStart 的对比,这两个都表示Activity已经可见了,但是onStart的时候Activity还处于后台,onResume的时候Activity才显示到前台onPause:表示Activity正在停止,正常情况下,紧接着onStop就会被调用,在特殊情况下,如果这个时候再快速的回到当前Activity,那么onResume就会被调用,主席的理解是这个情况比较极端,用户操作很难重现这个场景,此时可以做一些数据存储,停止动画等工作,但是注意不要太耗时了,因为这样会影响到新的Activity的显示,onPause必须先执行完,新Activity的onResume才会执行onStop:表示Activity即将停止,同样可以做一些轻量级的资源回收,但是不要太耗时了onDestroy:表示Activity即将被销毁,这是Activity生命周期的最后一个回调,在这里我们可以做一些最后的回收工作和资源释放正常情况下,Activity的常用生命周期用官网的一张图就足够表示了这里附加几个说明1.针对一个特定的Activity,第一次启动,回调如下:onCreate ——> onStart ——> onResume2.当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause ——> onStop ——> 这里有一种特殊的情况就是,如果新的Activity采取了透明的主题的话,那么当前Activity 不会回调onStop3.当用户再次回到原来的Activity,回调如下:onRestart ——> onStart ——> onResume4.d当用户按back键的时候回调如下:onPause ———> onStop ——> onDestroy5.当Activity被系统回收的时候再次打开,生命周期回调方法和1是一样的,但是你要注意一下就是只是生命周期一样,不代表所有的进程都是一样的,这个问题等下回详细分析6.从整个生命周期来说,onCreate和onDestroy是配套的,分别标示着Activity的创建和销毁,并且只可能有一次调用,从Activity是否可见来说,onStart和onStop是配套的,随着用户的操作和设备屏幕的点亮和熄灭,这两个方法可能被调用多次,从Activity是否在前台来说,onResume和onPause是配套的,随着用户操作或者设备的点亮和熄灭,这两个方法可能被多次调用这里提出两个问题1.onStart和onResume,onPause和onStop从描述上都差不多,对我们来说有什么实质性的不同呢?2.假设当前Activity为A,如果用户打开了一个新的Activity为B,那么B的onResume和A 的onPause谁先执行尼?我们先来回答第一个问题,从实际使用过程来说,onStart和onResume,onPause和onStop 看起来的确差不多,甚至我们可以只保留其中的一对,比如只保留onStart和onStop,既然如此,那为什么Android系统还会提供看起来重复的接口呢?根据上面的分析,我们知道,这两个配对的回调分别代表不同的意义,onStart和onStop是从Activity是否可见这个角度来回调的,除了这种区别,在实际的使用中,没有其他明显的区别第二个问题,我们就要从源码的角度来分析以及得到解释了,关于Activity的工作原理会在本书后续章节进行讲解,这里我们大致的了解即可,从Activity的启动过程来看,我们来看一下系统的源码,Activity启动过程的源码相当复杂,设计到了Instrumentation,Activit和ActivityManagerService(AMS),这里不详细分析这一过程,简单理解,启动Activity的请求会由 Instrumentation 来处理,然后他通过Binder向AMS发请求,AMS内部维护着一个ActivityStack,并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用,在ActivityStack中的resumeTopActivityLnnerLocked方法中,有这么这段代码//we need to start pausing the current activity so the top one can be resumedboolean dontWaitForPause = (.flags& ActivityInfo.FLAG_RESUME_WHILE_PAUSING)!=0;boolean pausing = mStackSupervisor.pauseBackStacks(userLeaving, KeyStore.TrustedCertificateEntry,dontWaitForPause);if(mResumedActivity != null){pausing != startPaUSINGlOCAKED(userLeaving,false,true,dontWaitForPause);if(DEBUG_STA TES){Slog.d(TAG,"resumeTopActivityLocked:pausing" + mResumedActivity);}}从上述的代码中我们可以看出,在新Activity启动之前,栈顶的Activity需要先onPause后,新的Activity才能启动,最终,在ActvityStackSupervisor中的realStartActivityLocked方法中,会调用如下代码app.thread.scheduleLaunchActivity(newIntent(r.intent),r.appToken,System.identityHashCode(r),,newConfiguration(mService.mConfiguration),pat,r.task.voiceInteractor,app.repProcState,r.icicle,r.persistentState,results,new Intents,!andResume,mService.isNextTransitionForward(),profilerInfo);我们都知道,在这个app.thread的类型是IApplicationThread的具体实现实在ActivityTread 中,所以,这段代码实际上遇到了ActivityThread当中,,即ApplicationThread的scheduleLaunchActivity方法,而scheduleLaunchActivity方法最终会完成生命周期的调用过程,因此可以得出结论,是旧Activity县onPause,然后新的Activityy再启动至于ApplicationThread的scheduleLaunchActivity方法为什么会完成新Activity的生命周期,请看接下来的代码,scheduleLaunchActivty为什么会完成新的Activtyprivate void handlerLaunchActivity(ActivityClientRecord r, Intent customIntent){//if we are getting ready to gc after going to the background,well we are back active so skip itunscheduleGcIdler();mSomeActivitiesChanged =true;if(r.profilerInfo != null){mProfiler.setProfiler(r.profilerInfo);mProfiler.startProfiling;}//Make sure we are running with the most recent confighandlerConfigurationChanged(null,null);if(localLOGV)Slog.vTAG,"Handling launch of"+r);//在这里新Activity被创建出来,其onCreate和onStart被调用Activity a = PerformLaunchActivity(r,customIntent);if(a != null){r.createdConfig = new Configuration(mConfiguration);Bundle oldState = r.start;handlerResumeActivity(r.token,false,r.isForward,!r.activity.mFinished && r.startsNotResumed);}//省略...}c从上面的分析可以看出,当新的Activity启动的时候,旧的Activity的onPause方法会先执行,然后才启动新的Activity,到底是不是这样尼?我们可以写一个小栗子来验证一下,如下是两个Activity的代码,在MainActivity中点击按钮可以跳转到SecondActivity,同时为了分析生命周期,我们把log日志也打出来MainActivitypackage com.liuguilin.activitysample;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;public class MainActivity extends AppCompatActivity {public static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);findViewById(R.id.btnTo).setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View view) {startActivity(new Intent(MainActivity.this, SecondActivity.class));}});}@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "onPause");}@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "onStop");}}SecondActivitypackage com.liuguilin.activitysample;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;/*** Created by lgl on 16/8/24.*/public class SecondActivity extends AppCompatActivity {private static final String TAG = "SecondActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_second);Log.i(TAG, "onCreate");}@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "onStart");}@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "onResume");}}这样我们可以观察到他的生命周期通过这个生命周期我们可以观察到,旧的Activity的onPause先调用,然后新的Activity才启动,这也证实了我们上面的分析原理,也许有人问,你只是分析了Andorid5.0的源码,你怎么所有的版本源码逻辑都相同,的确,我们不能把所有的版本都概括,但是作为Android 的一个运行过程的基本逻辑,随着版本的更新并不会很大的改变,因为Android也需要兼容性,,不能说在同一个版本上运行有两种不同的逻辑,那根本不可能,关于这一点,我们要把握一个度,就是对于Android的基本运行机制,的不同,Android不能在onPause中做重量级的操作,因为必须在onPause执行完成以后新的Activity才能Resume,从这一点我们也间接性的证明了我们的结论,通过分析这个问题,我们知道onPause和onStop都不能做耗时的操作,尤其是onPause,这也意味着,我们应当尽量的在onStop中做操作,从而使新的Activity尽快显示出来并且换到前后台三.异常情况下的生命周期分析上一节我们分析的是正常事情下的生命周期,但是我们写程序也不要理想化,居多的问题就是出在异常情况下,我们知道,Activity除了受用户操作导致的正常生命周期的调度,同时还会存在一些异常的情况,比如当资源相关的系统配置发生改变以及系统内存不足的时候,Activity就有可能被杀死,下面我们具体来分析下这几种情况1.情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建理解这个问题,首先要对系统的资源加载有一定的了解,这里就不详细分析系统资源加载的机制了,但是我们简单说明一下,拿最简单的图片来说,当我们把一张图片挡在drawable 中的时候,就可以通过Resources去获取这张图片了,同时为了兼容不同的设备,我们可能还需要在其他一些目录下放置不同的图片,比如drawable-xhdpi之类的,当应用程序启动时,系统会根据当前设备的情况去加载合适的Resources资源,比如说横屏手机和竖屏手机会拿着两张不同的图片(设定了landscape或者portrait状态下的图片),比如之前Activity处于竖屏,我们突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity会被销毁并且重新创建,当然我们也可以阻止系统重新创建我们的Activity默认情况下,如果我们的Activity不做特殊处理,那么当系统配置发生改变之后,Activity 就会销毁并且重新创建,可以看图当系统配置发生改变的时候,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,同时由于Activity是异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity 的状态,这个方法调用的时机是在onStop之前,他和onPause没有既定的时序关系,他即可能在onPause之前调用,也有可能在之后调用,需要强调的是,这个方法只出现在Activity 被异常终止的情况下,正常情况下是不会走这个方法的吗,当我们onSaveInstanceState保存到Bundler对象作为参数传递给onRestoreInstanceState和onCreate方法,因此我们可以通过onRestoreInstanceState和onCreate方法来判断Activity是否被重建。
封面Android TV开发教程阅读本教程的前提需要android基本.第1章前言当然,本教程没有让你,欲进入TV行业必先自宫的话,因为这不是一本武功秘籍,更不是一本深入android的书籍。
阴错阳差,我进入了AV(android tv)行业.也许很多朋友都是从手机开发转到TV开发,往往会很疑问,TV开发和手机又什么不同,第一点需要知道的是,TV的交互性都是基于遥控器的,虽然鼠标也支持,但是99%的操作性都是在遥控器下完成的(如果你用的无线鼠标,就当我没说过吧~!~!)。
第2章如何使用框架2.1 Android Studio 导入框架教程.新建一个你自己的项目,这里假设你已经回使用AS了,不会使用的话,你只能再去好好学习了.项目就创建好了.选择菜单Import Module导入TV框架.导入的文件是androidtvwidget.导入项目成功的话,会在你创建的项目出现androidtvwidget 的目录.虽然导入了TV项目,但是还是需要去加入TV项目.右键菜单Open Module Settings设置下框架库.点击右侧的绿色+号,选择 Module dependency.可以尝试的写 MainUpView ,看看有没有提示或者不报错,如果没有问题,那你就成功了,可以开始写TV方面的应用了.2.2 Eclipse 导入框架教程.暂时没有教程喔,只能自己拷贝过去吧,有办法的联系我.第3章进入开发的世3.1 TV模拟器的使用这里推荐Genymotion, 天天模拟器.我们这里使用天天模拟器.设置模拟器的分辨率为 1920x1080, 1280x800, 1280x720 来开发.一款合格的TV开发的模拟器,要满足以上两个功能:调节分辨率和 dpi.3.2 一个简单的demo.大家都知道,一切的编程的开头学习都是都从 Hello World 开始.对,我们这里也不例外,我们从button开始,哈哈.希望用这个DEMO带领大家走进android TV开发的大门.。
TVAPP开发笔记(四)——MediaPlay实现MP3播放功能1概述写程序有时候是会上瘾的,就像玩游戏一样,尤其是碰到点问题的时候,总想找出问题的症结,寻找最佳的解决方案,最终搞定它,这或许就是一种乐趣吧。
随着开发的进行,计划就会慢慢偏离轨道,总有些想象不到的问题,总想让自己的程序看起来完美一点,于是进度就变得不那么可控了,这或许也就是项目管理人和开发工程师的冲突原因之一吧,在项目管理人员眼里只有时间和功能,功能实现就OK了,开发工程师可能更了解其中的细节,总想在细节上做的更好,在过程中需要寻找完美,运气不好还经常碰到些莫名其妙的问题,特别是在尝试一些新方法的时候,时间就变得不那么可控了,这可能是永远的宿命吧。
可怜而可爱的程序猿们。
上个版本只是一个原型,在这个版本对界面进行优化,增加课文全屏显示(除按钮区域外)功能,同时对上节谈到几种方法作了完整实验,发现这几种方法,文件都会被打包到APK文件中,而且只需要解压一下,文件统统暴露,看样子只能APK文件加扰或者对文件进行加密处理了。
当然最重点还是实现课文朗读功能,其实就是播放对应的MP3文件。
然后就是实现相关业务逻辑啦,基本上实现目标功能。
2界面优化上一节中,课文页面的显示中,长和宽是设置的固定值,在实际系统中必定不能这样处理,否则根本无法适应不同的手机屏幕,所以界面优化首先干的事情就是把课文页面的显示改为自适应的。
这个设置主要和两个因素有关,一个是layout布局,选择正确的布局,是整个界面设计自适应的基础,然后就是设置控件正确的height,width属性。
Android的布局管理器好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于看见的漂亮界面了。
Android系统中为我们提供了五大布局:LinearLayout(线性布局)、FrameLayout(单帧布局)、AbsoluteLayout(绝对布局)、TablelLayout(表格布局)、RelativeLayout(相对布局)。
安卓复习笔记第一章andriod的部署与配置 (3)1. 安卓SDK的配置过程: (3)2.对应用进行单元测试 (3)第二章Activity (4)一、用LauncherActivity 开发Activity列表 (4)uncherActivity的使用 (4)2. ExpandableActivity 生成一个可展开的列表窗口 (4)3. 使用PreferenceActivity作为选项参数并进行保存的窗口 (4)二、启动和关闭Activity (4)1. Activity启动其他Activity有如下两种方法: (4)三、Activiy的生命周期 (5)第三章使用Intent和IntentFilter进行通信 (6)一、Intent的属性及配置 (6)ponent:是Intent的一个属性 (6)2.action和category用法 (6)二、请求码的作用 (6)三、结果码的作用: (6)第四章广播接收者-BroadcastReceiver (8)一、广播接收者(BroadcastReceiver) (8)二、使用广播进行短信的接收 (8)三、广播的用法 (9)四、对广播进行管理 (9)第五章数据存储与访问 (10)一、Android中数据存储的几种方式 (10)二、使用文件进行存储 (10)三、文件的四种访问权限 (10)四、读取文件内容 (10)1.使用openFileInput()方法 (10)2.直接使用文件的绝对路径 (10)五、把文件放在SDCard中 (11)六、使用SAX或者DOM或者pull解析XML文件 (11)1.使用SAX读取XML文件 (12)2. 使用Pull解析器读取XML文件 (12)3. 使用SharedPreferences进行数据存储 (13)第六章SQLite数据库存储数据 (14)一、SQLite数据库的特点: (14)二、对数据库版本进行管理 (14)三、使用SQLite数据库进行CRUD操作 (14)四、使用SQLiteOpenHelper获取用于操作数据库的SQLiteDatabase实例 (15)五、使用事务操作SQLite数据库 (15)第七章使用ContentProvider共享数据 (16)一、使用ContentProvider数据共享方法 (16)二、URI的组成结构 (16)三、操作Uri的工具类 (16)1.UriMatcher类的使用 (16)2. ContentsUri类使用:withAppendedId(uri, 10)和parseId(uri) (17)四、contentProvider类的主要方法 (17)五、使用ContentResolver操作ContentProvider中的数据 (17)六、ContentProvider中数据变化时发出通知 (18)第八章从Internet获取数据 (19)一、利用HttpURLConnection对象,我们可以从网络中获取网页数据 (19)二、利用HttpURLConnection对象,我们可以从网络中获取文件数据 (19)三、多线程断点续传下载 (19)四、向Internet发送请求参数 (20)五、利用HttpURLConnection对象,我们可以向网络发送xml数据. (20)第九章服务--Service (21)一、服务类的开发步骤 (21)二、与Activity能够通信的服务 (21)三、电话窃听器 (21)第十章Android中常用控件及功能组件 (23)一、音乐播放 (23)二、使用SoundPool播放音效 (23)三、视频播放 (23)四、使用摄像头拍照 (24)五、状态栏通知(Notification) (24)六、对话框通知(Dialog Notification) (25)七、创建带单选项列表的对话框 (25)第十一章自定义控件 (27)第一章andriod的部署与配置1.安卓SDK的配置过程:A)安装java JDK后设置环境变量java_homeJava_home=c:\Program files\java\jdk_1.6Java_jre_home=c:\Program Files\java\jdk_1.6\jreJre_home=c:\Program Files\java\jre6B)在配置好jdk的环境变量后对安卓中环境变量进行配置Android_SDK_HOME=c:\Mobile Phone DEV\Android SDKCLASSPATH=.;%JA V A_HOME%\lib;%JA V A_HOME%\lib\tools.jar;%JA V A_HOME%\lib\dt.jar;%JRE_HOME%\lib;%JRE_HOME%\lib\rt.jar;%JA V A_JRE_HOME%\lib;%JA V A_JRE_HOME%\lib\rt.jarPath=%Android_SDK_HOME%\tools;%JA V A_HOME%\bin;%JRE_HOME%\bin;%JA V A_JRE_HOME%\bin;2.对应用进行单元测试第一步:首先在AndroidManifest.xml中加入下面红色代码:<manifest xmlns:android="/apk/res/android"package="cn.itcast.action“ android:versionCode="1“ android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" />....</application><uses-sdk android:minSdkVersion="6" /><instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="cn.itcast.action" android:label="Tests for My App" /></manifest>上面targetPackage指定的包要和应用的package相同。
Android智能电视APP开发笔记(一)
1缘起
以小米盒子为代表的OTT机顶盒、智能电视的快速普及,快速推动了Android技术在机顶盒、智能电视领域的普及。
既然都是用的Android操作系统,那么从技术上来说应该是大同小异的,当然和手机APP的应用相比,电视端的APP开发应该有一些都有的特点需要关注,我相信这样的特点应该不会太多。
写这个笔记的缘起在于一个生活上的小小不便,因为儿子正在读小学,每天早上起来都需要听英语,学校发的磁带真的是不方便,老的磁带机相信很少有人用了,虽然也给他买了一个步步高的复读机,不过没用几天就被搁置了。
于是我在网上搜了个APP,在手机上很好用,可以直接翻看课文,也可以朗读课文,翻到哪页就朗读哪页,如果不翻动,就自动往下读,做的还是相当人性化的,但是这样一个新的问题产生了,每天早上我的手机就被我儿子霸占了,接到音响上听英语了,我要看个朋友圈啊啥的,就不方便了。
刚好家中有个OTT机顶盒,可以安装APP,就想着把这个APP装到OTT机顶盒上,结果发现完全无法使用,界面不对了,遥控器也响应不了了,完全无法使用啊,结论就是手机APP和TV APP还是有些区别的,须要作些微调适配的。
咋整呢?重新给写一个TV APP吧,为了夺回我手机的控制权,好歹哥以前也是开发工程师啊。
2Win7虚拟机创建
2.1 VMware Workstation安装
直接把开发环境安装在自己电脑上感觉不是太好,一个影响系统运行速度,二是免不了要装了卸,卸了装,把电脑运行环境搞得乱七八糟。
所以决定还是在虚拟机环境中玩。
虚拟机当然选行业老大VMware了,下载Vmware workstation进行安装。
没想到这玩意都升级到11.1版本了,这个世界真的是变化快啊。
从官网下载后再安装:
一路Next基本就OK了,几个注意点:
1、选择典型安装或自定义安装;建议单击“自定义”;然后选中要安装的功能(建议钩选“增
强型键盘使用工具”,凭感觉,也不知道什么原因,反正也没装Visual Studio,所以没选择这个插件);
2、建议不要勾选“启动时检查产品更新”;
3、建议不要勾选“帮助改善VMware Workstation”;
4、中途若出现杀毒软件提示修改,请选择“允许”;出现“您信任该网络连接吗?”时,按需选
择;建议选择”是的,这是一个可信任的网络“;
到了输入许可证密钥界面,我用了这个:1F04Z-6D111-7Z029-AV0Q4-3AEH8,目前可用,未来过期失效了不要找我。
2.2 Win7安装盘准备
在Vmware上创建虚拟机之前,先得准备个Win7安装光盘或者ISO文件,我是找别人要了张Win7旗舰版的安装盘,然后用UltraISO制作成ISO文件备用的。
2.3 创建虚拟机
打开VMware Workstation软件,然后选择“创建新的虚拟机”
建议选择“自定义”,然后Next,
选择默认值,Next
我是采用的ISO文件作为操作系统光盘的,Next
有序列号输入序列号,没有的话先不输入,装完后用免激活工具吧;反正是虚拟机,就不设置密码了,启动简单一点;Next
弹出个提示框,选“是”喽,Next
这一步根据需要设置,建议不要放在C盘系统盘,Next
选默认的,Next
这几步视需要配置好了,Next
这个建议用“桥接网络”,这样最接近真实物理机,Next
这两步都用推荐配置好了,Next
这里当然新建了,手头又没有现成的虚拟磁盘;Next
选了默认配置,心里有点慌,以前搞个XP的虚拟机也就10G撑死了,现在一下就60G,有点吓人哦,Next
终于OK了,点“完成”开始创建虚拟机了
2.4 安装Win7
虚拟机装完后,开始启动虚拟机,因为设置了光盘为Wi7安装盘的ISO文件,虚拟机会自动进入Win7安装程序,基本不用人工干涉,就让它一路安装就行了。
虚拟机会自动重启几次,安装完后,就可以进行后续的工作了。
可以选择全屏模式,看起来舒服一点。
对了,还有个重要的步骤,激活操作系统
还得有劳百度,可以下载一个免激活软件,装完以后启动,然后点击“开始体验正版”
然后弹出以下界面,然后自动重启系统;
最后在“计算机”上点击属性:
看到后面的正版标志,就OK了。
3下节预告
本节起始跟开发没什么关系,只是搭建了一个Win7的虚拟机,但是这个虚拟机是后续开发的基础啊,所以还是简单介绍了一下,如有必要我可以把这个虚拟机直接放在云盘上上共享,也省得大家辛辛苦苦搭建这个环境了。
下节将会进行开发环境的搭建工作介绍,会对Eclipse和android Studio都会做个介绍,敬请期待。