Android应用项目-halloya【完结】

发布时间:2016-12-6 16:14:14 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Android应用项目-halloya【完结】",主要涉及到Android应用项目-halloya【完结】方面的内容,对于Android应用项目-halloya【完结】感兴趣的同学可以参考一下。

一直想开发一款和汽车相关、能够应用于Android系统手机的app。目前我Java水平基本零起步,未来以每天大概15分钟时间的进度学习开发。本文用于记录学习过程,将所积累经验系统化。本文长期保持更新,争取每日一新~ 2013.10.7 halloya的开发已完结,不再完善halloya。汽车app我会继续憧憬,在适时的时候立项。目前还在学习阶段。 2013.9.6 halloya的开发暂时告一段落,halloya还存在一些问题,比如延迟、比如声音生硬。但是最大的问题是没有功能,日历功能并不是我想做的内容。那么下面我打算重新开发一个项目,这个项目将具有实际的功能。这里我就不做市场调查了,我打算做一个自己需要的软件,我也算是个消费者吧,软件工程师首先应该试着满足自己的需求,然后再去尝试满足别人的需求。 声音版的halloya,也就是上篇日志所提的halloya的下载地址是http://vdisk.weibo.com/s/aCjj1up_wVbY3 我还发现软件开发不必完全按照工程流程来办,因为一些流程并不是做每个软件尤其是小软件所必须的,在初开发的时候完全可以灵活处理,流程只是思路或者提示。 应用软件的编程如果照搬网上的攻略,也可以做出一个应用软件,但是照葫芦画瓢并不能做出很好、实用性很强的软件。我感到需要还要继续学习操作系统的相关知识。即使不学习计算机硬件的系统结构,也需要学习操作系统这个最基本的软件,这是和计算机硬件结构最相关,也是计算机硬件结构的抽象和简化。 我试用了WPS,最新的WPS很让人惊艳,WPS最为一个老软件,不断更新,围绕office主题,从没有特色到开始让人赏心悦目,进步不小。又使用了黑莓操作系统,好像也是深度定制的安卓,只是主界面简化融入到了应用九宫表中。 2013.9.3 halloya有两个activity:face和hallo。从face切换到hallo发出声音Hi, welcome。使用soundpool完成。切换到hallo之后播放音乐——樱桃小丸子主题曲。使用MediaPlayer完成。前者适合播放短促的音频(不大于一兆),后者适合播放时间较长的音频。但是MediaPlayer有播放延迟的缺点。经验证,延迟非常严重。 参考文献:http://blog.csdn.net/ddna/article/details/5176233 public class face extends Activity中Activity是父类,face是继承Activity的子类。可以看出对象是结构体的一个变种,也需要声明,和赋值,赋值呢,也就是实例化。声明就是在使用之前分配存储空间。 face.java                                                                                 package com.example.halloya3; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.Button; public class face extends Activity { private Button button1; //声明button1 private SoundPool sp;//声明一个SoundPool private int music;//定义一个整型用load();来设置suondID @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.face); button1=(Button)findViewById(R.id.button1); sp=new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);//第一个参数为同时播放数据流的最大个数,第二数据流类型,第三为声音质量 music=sp.load(this, R.raw.welcome,1); //把你的声音素材放到res/raw里,第2个参数即为资源文件,第3个为音乐的优先级 button1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { sp.play(music, 1, 1, 0, 0, 1); Intent intent = new Intent(); // 建立 Intent intent.setClass(face.this, hallo.class); // 设置活动 startActivity(intent); finish(); // 结束当前活动 } }); } } hallo.java                                                                                package com.example.halloya3; import android.media.MediaPlayer; import android.os.Bundle;//activity info exchange import android.app.Activity; import android.view.Menu;//right-up corner menu public class hallo extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);//调用父类方法 setContentView(R.layout.hallo);//set the current view MediaPlayer mp=MediaPlayer.create(this, R.raw.xiaowanziclip); mp.setLooping(true); mp.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 2013.8.25 拟按照规范的软件工程设计方法设计halloya,以便于管理。 开发思路大致如下: halloya3新功能需求分析: 1.打开时有一个静态界面,当点击界面发生界面切换时,发出welcome!的女声。 2.进入第二个界面时,点击界面上的分享下载地址按钮,复制halloya本版本下载地址到剪切板,并发出“halloya下载地址已复制”的女声 3.点击第二界面退出按钮,退出程序。 halloya3原理设计: 一个界面就是一个activity,那么功能1要求程序中有两个activity。每个activity都有一个自己的程序。以前版本的hallya的界面切换触发工作是由一个button对象完成的。这button大小覆盖整个界面一,以达到触碰界面任何一个地方都能触发界面切换。 界面一所对应的activity的程序命名为face.java 界面二所对应的activity的程序命名为hallo.java to be continued...                                                                                        资源文件夹下的各个文件夹的分类 layout 布局 这个就是你经常看到的与用户交互的界面的 xml 文件,就是各个 view 的排列和嵌套,没什 么好说的啦 风格和主题、 风格主要是指 view 的显示风格 ; anim 一般是设置动画,画资源分为两种,一是实现图片的 translate、scale、rotate、alpha 四种变化。还可以设置 动画的播放特性;另一种是帧动画,逐帧播放设置的资源;  drawable 主要是是存放所使用的图片的!  menu:菜单 菜单即可以从代码中实现也可以在资源文件中配置;  把图像文件放在 res/raw/ 目录下,这样可以避免被自动优化。 values 是用程序人员设置的一些常量的XML文件,便于修改和使用,一般有Strings,colors等 assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件。 参考文献:http://zhidao.baidu.com/question/442217451.html 2013.8.16 让halloya拥有语音功能是我的下一目标,我并不指望hallya能够像siri那样能够与人对话,而是让halloya能够更亲民一些,更加人性化,那么我还没有实现的功能二就可以用语音而不是对话框的形式完成。另外在欢迎界面上也加上一个语音,比如welcome! 用个女声。添加MP3文件,作为一个对象,用按钮“分享下载地址”触动,发出“已复制halloya下载地址”的提示。 参考文献:http://blog.csdn.net/lissdy/article/details/8392961 2013.8.9 今天是9号,我用两天,其实是前天把7号日志中的第一个功能给实现了,昨天打了一天游戏(CIV V)。当然还是很简单,点击一下欢迎界面,就能进入功能界面了。界面的转换就是两个activity的转换。 至于功能二,我是这样设想的 当我按下右上角的“分享下载地址”的时候,弹出一个提示:“已复制halloya的下载地址”,然后halloya的下载地址已被复制到剪切板。 这个就涉及到弹窗和剪切板功能的使用。 2013.8.7 希望halloya继续改进,而不是重新再做一个project。halloya目前功能简单,或者说还没有功能,下一步希望能增加两个功能: 一是背景切换功能,目前只有一个背景图案,比较单调,希望后面能增加几张图片,实现选择切换,这个涉及到layout的切换,即布局切换 二是来自久翔的建议,增加下载网址分享功能,让使用能及时获取下载网址并复制到剪切板,便于分享。其实这个也便于使用者及时更新。 2013.8.3 1、error:No resource found that matches the given name. string找不到,后来发现是因为string不支持单引号。去掉单引号后显示拼写错误,但是没有编译错误了。 2、字体颜色的设置:需要新建一个资源文件:color.xml。引用时@ 一下就可以了 3、像素密度dpi-dot per inch和显示模式有对应关系 如Note2的显示模式是WXGA+(Wide Extended Graphics Array)1280*720,属于xhdpi即extra high dot per inch。适合看电影。 4、PANIC: Could not open: AVD问题的解决http://www.dotblogs.com.tw/nethawk/archive/2013/04/21/102043.aspx,而且修改完环境变量后还需要log out 一下。 5、最新一版的halloya,http://vdisk.weibo.com/s/aCjj1up_xcqXL 2013.8.1 对于app应用程序中的源代码格式还是不太熟悉,setcontentview函数的使用还不熟,觉得还需要看看《操作系统》,理解下activity这种基本的概念。 试着用了下微信的公共账号,这种账号用好了的确可替代不少app,免装,省空间,省流量。尤其是可以加上语音识别功能和自然语言系统,以对话形式完成app的功能,能免去使用者的学习的时间,现在的app的操作复杂,能免去这一过程多好啊。 昨天又做了一个新版本halloya,本来是想做layout的切换的,当时没实现,暂且实现了layout的delay。用到了前面的倒计时程序,代码见7月16日的日志。下载地址:http://vdisk.weibo.com/s/aCjj1up_xbZpj/1375357123 2013.7.31 以下摘抄自http://mobile.51cto.com/android-267009.htm drawable- hdpi、drawable- mdpi、drawable-ldpi的区别: Android2.1(含)以后的版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个目录,这三个目录主要是为了支持多分辨率。 dpi是“dot per inch”的缩写,每英寸像素数。 四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high) 一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。 2013.7.30 昨天完成了我人生中第一个app,尽管还很简单,但是我的兴奋溢于言表。哈哈 这个app 名叫halloya,就是你好啊的意思。编译也就是debug过后,ADT会自动生成apk安装包,在bin/res中就能找到。十分简易。 File>New>Android Application Project就开始建立新的android app工程了, target SDK选择低版本比较好,因为测试设备的系统一般不是最新的。 HalloActivity.java是源代码程序,在这里设定功能。 gen文件夹中是创建project时ADT自动生成的资源文件文件夹,BuildConfig.java和R.java均系自动生成。 res中有几个文件需要自己edit,一个是drawable中的图片文件,这个是app的icon或者app打开后的背景、动画啊等等。layout中的activity_hallo.xml是布局文件,app打开后显示什么就在这里修改。values中的strings.xml是字符串资源文件,布局文件要求显示的文字就在这里修改。 2013.7.28 APK就是一个压缩包 2013.7.27 这周去襄阳旅行日记间断了很久。昨天又开始学习了。 回到正题,昨天看了《lisp的本质》一文,里面谈到了lisp和xml的关系,在此之前我也发现了xml和lisp在外表上有很多相似,但是两者是不是有根本上的联系还要等我学习了lisp语言后才能断言。也有人说lisp的精华是lambda计算。姑且放着,日后再说。 每一个android应用程序都分为资源文件和源代码文件两部分,还包括一个manifest文件,也就是原来所说的工程描述文件。manifest, a customs document listing the contents put on a ship or plane。如果应用程序是一艘船,那么manifest文件就是船上所有物品的花名册了。 2013.7.20 XML的简单编辑方法,可以不用专业的编辑器,使用notepad,编写好后,保存时注意在文件名后加上.xml,再搭上双引号就可以了。 下面是一个简单的xml文本内容 <?xml version="1.0" standalone="true"?> //版本1.0,无需从外部导入文件,该文件独立,全部文档内容都在这个文件中  <FOO> Hello XML! </FOO> //<FOO>是开始标记,</FOO>是结束标记,中间是被标记的内容,三者组成一个元素FOO,这个元素是自己定义的。 保存时写"hello.xml" 2013.7.17 XML文件的创建,ADT下,file>new>other,弹出一个对话框select  a wizard,选择XML>XML File。 创建一个资源文件,存储一个名为hello_activity_text_text的字符串 <?xml version="1.0" encoding="UTF-8"?> //标准的文件头,文件格式版本1.0,编码格式UTF-8  <resources>     <string name="hello_activity_text_text">hello, world!</string> //字符串名字为hello_activity_text_text,值为hello, world!  </resources> 2013.7.16 原1.0版程序不能按时间真正读秒,以下晚安倒计时2.0可以实现,倒计时10秒,关键函数System.currentTimeMillis(),即当前毫秒时刻 package a; public class Ccc  {  public static void main(String[] args)   {   long I=System.currentTimeMillis()/1000;//记录当前时刻    long II=I;   long III=II;   while(III-I<=10)//倒计时时间为10秒     {        III=System.currentTimeMillis()/1000;//记录最新时刻,单位秒         if (III-II==1)        {         II=III;System.out.println(11-III+I);//如果最新时刻与上一时刻差1,那么输出还剩余的时间         }    }   System.out.println("晚安~");  } 输出: 10 9 8 7 6 5 4 3 2 1 0 晚安~ 2013.7.15 分支和循环,晚安倒计时程序1.0 package a; public class Cc  {   public static void main(String[] args)    {   int i;    for(i=10;i>=0;i--)      {       System.out.println(i);       if (i==0)         System.out.println("晚安~");       }    }    } 输出: 10 9 8 7 6 5 4 3 2 1 0 晚安~ 2013.7.14 SDK里有很多应用程序的例子,本来应该也有HelloActivity的例子的,但是没有找到。其他的例子太复杂,一时还难以看懂。 一个android应用程序包括几个XML文件,除了java文件之外。这些文件包括工程描述文件、布局文件、字串资源文件。有两个常见的文件夹:res和src,前者是resourse,资源之意;后者是sourse code,源代码之意。 在应用程序的压缩包apk中: apk -工程描述文件.xml -res  -布局文件.xml  -字串文件.xml -src  -源代码文件.java xml语言俺也不会,慢慢来~ 2013.7.13 现在有个初步想法,把已经编写好的hello world源代码完善成为一个完整的android应用程序,测试设备为我的某不知名厂家生产的pad。 2013.7.7   使用ADT中的eclipse编写运行 hello world小程序,源代码如下: 1> package a; //类包a public class helloworld //公共类helloworld,意味整个程序可以访问 { public static void main(String[] args) //主方法即主函数,程序从此开始运行 { System.out.println("Hello, world!"); //输出命令 } } 1| 输出结果: Hello, world! 2013.7.8   hello world升级版,源代码如下: 2> public class helloworld  { public static void main(String[] args) { System.out.println("Hello, world!"); //println输出后换行 System.out.print("Welcome!"); //print输出后不换行 System.out.print("Baby"); } } 2| 输出: Hello, world! Welcom!Baby 增加两个非公共类hello和world,保留公共类helloworld,每个程序只能有一个公共类,但可以有多个非公共类。 3> package a; class hello //declare non-public class hello  { String time="2013.7.8"; public void pt() //method pt()  { System.out.println(this.time); } } class world //declare non-public class world  { String address="China"; public void pa() //method pa()  { System.out.println("Welcom to "+this.address+"! Baby"); } } public class helloworld //declare public class helloworld  { public static void main(String[] args) { System.out.println("Hello, world!"); world w=new world(); //creat new object w  w.pa(); //use its method pa() hello h=new hello(); //creat new object h  h.pt(); //use its method pt()  } } the new result is: Hello, world! Welcom to China! Baby 2013.7.8 3| 2013.7.9   声明类hello,hello只有一个属性time,一个方法pt() 类分public class和non-public class,主方法在public class里。方法分public和private,当程序3中pt()由public改为private时候,主方法无法调用这个方法,而仅去掉public对程序结果没有影响。。 4> package a; class hello { String time="2013.7.8"; String pt()  {  return this.time; //time作为返回值  }  } class world { String address="China"; public void pa() { System.out.println("Welcom to "+this.address+"! Baby"); } } public class helloworld  { public static void main(String[] args) { System.out.println("Hello, world!"); world w=new world(); w.pa(); hello h=new hello(); System.out.println(h.pt());  } } 4| 输出结果和程序3相同。 2013.7.10 用一个小程序实现人和电脑的简单交互,我向电脑说hello,电脑向我回复hello,my lord!我如果说XX,电脑向我回复XX,my lord! 5> package a; import java.io.IOException; class feedback {  String n;  public feedback(String n)  {   this.n=n;  }  public void fb()  {   System.out.println(this.n+" my lord!");  } } public class Interaction  {  public static void main(String[] args) throws IOException  {   byte[] b=new byte[20];     System.in.read(b);    String s;    s=new String(b);   feedback f=new feedback(s);   f.fb();  } } 5 input: Good afternoon output: Good afternoon            my lord!  

上一篇:learning puppet 1--Overview
下一篇:数据库事务

相关文章

相关评论