01_前言

前言,了解了Android的情况。这里也介绍一下本文。本文是记录学习Android应用程序开发过程,视频中使用的Android2.2版本号,我以4.2版本号为基础,找出当中的差异并记录下来。会不断的更新。

一直苦于编写后底层代码后,须要编写Apk来測试。所以学的Android应用。

记录时环境记录:

系统环境:Ubuntu 12.10

Eclipse:   ingigo-sr2

Adt  :    22.3

02_搭建Android开发环境

我用的是Ubuntu,所以有了这文章:

一.Eclipse的安装

安装Eclipse有两种方法:1.apt-get install eclipse 2.下载安装包。

假设採用第一种方法安装的Eclipse在进行以下的步骤时遇到错误。别和错误计较。赶紧採用另外一种安装方法又一次安装Eclipse。关于Eclipse版本号的选择,我选用eclipse-java-indigo-SR2-linux-gtk.tar.gz;3.7的用的时候出现解析xml极为卡的问题。

二.ADT的安装

ADT推荐离线安装,版本号我选择的是ADT-22.3.0.zip,我是选择过22.6.*不好用的之后才回退到22.3.0的。

这个真心好用。这里简单说下22.6.*版本号出现的问题:1.会默认创建fragment_main.xml 2.假设要兼容2.3的程序每一个应用会多出一个附带应用appcompat_v7。

导入ADT的zip包的时候,不要勾选“在线检測”。

三.SDK的安装

SDK选择和ADT配套版本号:android-sdk_r22.3-linux.tgz。用起来感觉还不错。下载其他SDK包的时候不建议将SDK更新到22.6.*版本号。应用开发版本号选择4.2。虚拟机的话,不建议用4.4的,4.4的easy崩溃。

03_创建与启动手机模拟器和学习使用ANDROID操作系统

一.假设实在要使用模拟器,注意下面几点

1.不想让模拟器占满屏幕,手动启动并设置大小

2.想要模拟器执行的快一些选择x86版本号CPU(似乎眼下仅仅有4.4的能够支持)

3.模拟器能调试的功能有:(列出曾经觉得不能调试的东西)

A.拨号

 B...

4.老罗的博客上有很多其它关于模拟器的使用。

二.怎样使用真机

1.常常使用adb。将adb加入到环境变量中。不推荐使用apt-get install android-platform-tools安装。

2.连接真机參考《Linux下安装Android的adb驱动-解决不能识别的问题》。

三.关于通过Wifi调试Android设备

1.有两种方法:1.连接到普通的无线路由;2.Ubuntu设置wifi无线热点+Android手机怎样搜索连接到共享网络+补丁

2.又一次挂载文件系统《Android改动system仅仅读权限:remount

3.ADB调试《Android中使用WIFI来连接ADB

四. 关于使用

.......

4_开发执行第一个应用程序

关于apk的安装,假设採用命令行的话,我使用的是:

$ adb push Test.apk /data/app

我且称它为覆盖安装,即假设已经存在该apk,直接覆盖不用再运行adb uninstall。

05_项目的文件夹结构与安装及启动过程分析

1.关于res/drawable-*文件夹

   在Eclipse中你放到drawable-*随意文件夹放入图片资源,在编译时都能找到,可是假设在Android源代码中编译,一定要放到drawable-ldpi中才干够编译通过。否则不能编译柔肠通过。假设你想程序能够同一时候能够在Eclipse和Android源代码中成功编译那么就请把图片资源放到drawable-ldpi中。

2.关于string.xml

   假设软件没有考虑到语言国际化或者关键实现代码逻辑而非界面。那么有可能直接字串到Activity.xml中,这样在Eclipse中编译是ok了。可是在Android源代码中编译是闷骚地只是关的。会严格不同意这样做的。仅仅能在Android.mk中加入LOCAL_MODULE_TAGS := tests才干够编译过。

06_电话拔号器

1.隐藏启动列表中的应用图标

术语:禁止luncher启动apk。凝视一行:

<!--<category android:name="android.intent.category.LAUNCHER"/> -->

2.id/变量命名规则

1)Xml文件里:

开头是凝视用“Cpies”(功能名)。labelFor为copies_edittext(功能名+edittext-无须要改变的TextView能够不用id。可是用的话就是例如以下labelFor的名字),文字用”label_copies”(label+功能名)。(源代码位置:这里

<!-- Copies -->

<TextView

.....

android:labelFor="@+id/copies_edittext"

android:text="@string/label_copies">

.....

</TextView>

2)变量名_以id为copies_edittext为例(源代码位置:这里

// Copies

mCopiesEditText = (EditText) findViewById(R.id.copies_edittext);

所以我认为电话拨号器中的命令应该是:

MainActivity.java

main_activity.xml

string.xml

-

-

label_mobile_number

mMobileNumberEditText

mobile_number_edittext

-

mDialButton

dial_button

dial

(局部变量就无所谓了。这里的intent)

3)关于查看资料

主页: https://developer.android.com/

Permission:  reference/android/Manifest.permission.html(链接)

Intent:  reference/android/content/Intent.html(链接

4)代码优化

拨号关键代码能够优化为例如以下

String number = mMobileNumberEditText.getText().toString();

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));

startActivity(intent);

07_查看应用输出的错误信息与怎样部署应用到真实手机

1关于手机驱动

连接到Linux上不须要额外驱动。直接改动adb的配置文件就可以,不能识别參考《Linux下安装Android的adb驱动-解决不能识别的问题》。

2 Android Screen Monitor

这个软件相同实现了Linux版本号,主页和下载地址。执行:

  $ java -jar asm.jar

就能够查看并操作手机了。

08_短信发送器

1.变量名

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

MainActivity.java

main_activity.xml

string.xml

-

-

app_name

-

-

label_mobile_number

mMobileNumberEditText

mobile_number_edittext

-

mSmsContentEditText

sms_content_edittext

-

mSendSmsButton

send_sms_button

send_sms


09_深入了解各种布局技术

1.四种布局 a.线形布局 b.相对布局 c.表格布局 d.帧布局

2.图片位置假设不做屏幕适配,建议放置到drawable-ldpi中。由于在系统源代码中编译的应用,是去ldpi中找图片资源的。

10_相应用进行单元測试

这个着实是有用的,曾经做一些业务类測试的时候都是使用在界面上实现一个button点击,因为是界面点击的,处理超时还会被警告超时关闭.单元測试确实是一个好方法,这点C语言的gdb都没有如此的强大.做一个模板,用到的时候直接測试:

1. copy this content into your AndroidManifest.xml

<uses-library android:name="android.test.runner" />

    </application>

    <instrumentation

        android:name="android.test.InstrumentationTestRunner"

        android:label="Demo for JUnittest"

        android:targetPackage="com.example.xml" />

2. Change [com.example.xml] to your current package name

3. Create a TestXXXService.java based AndroidTestCase.

11_查看与输出日志信息

1.Miui输出:Log too more...

2.

12_文件的保存与读取

没有实现界面,直接使用单元測试完毕FileService的測试。ByteArrayOutputStream是第一次接触,攻克了C语言中读文件不便利的问题。

13_文件的操作模式

关于MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

都在API-17(4.2.2)时给禁用了,能够使用java/io来解决:

File f = new File(pdfPath);

file.setReadable(true, false); //使得该文件能够读

file.setWriteable(true, false); //使得该文件能够写

getCacheDir()方法获取当前包下的cache文件夹路径。

getFilesDir()方法获取当前包下的files文件夹路径。

14_把文件存放在SDCard

重点:

1.APK卸载后。这个APK在Sdcard中创建的文件夹和文件怎样被删除掉呢?

2.不能使用mContext.openFileOutput();

3.4.2.2中sdcard实质是/data/media/。

4.放到sdcard中的文件能够被其他应用所读取

16_採用SharedPreferences保存用户偏好设置參数

样例:

public class PreferencesService {

Context mContext = null;

public PreferencesService(Context context) {

mContext = context;

}

public void save(String name, Integer age) {

SharedPreferences mSharedPreferences = mContext.getSharedPreferences("itcast", Context.MODE_PRIVATE);

Editor mEditor = mSharedPreferences.edit();

mEditor.putString("name", name);

mEditor.putInt("age", age);

mEditor.commit();

}

public Map<String, String> getPreferences() {

Map<String, String> params = new HashMap<String, String>();

SharedPreferences mSharedPreferences = mContext.getSharedPreferences("itcast", Context.MODE_PRIVATE);

params.put("name", mSharedPreferences.getString("name", ""));

params.put("age", String.valueOf(mSharedPreferences.getInt("age", 0)));

return params;

}

}

17.

23_网络图片查看器

依照视频上写出来的代码在4.0上执行出现例如以下异常:

android.os.NetworkOnMainThreadException

stackoverflow给出的建议是用AsyncTask,介于AsyncTask还没有学习。决定用新的线程还解决问题:

/**

* 下载线程

*/

Runnable downloadRun = new Runnable() {

@Override

public void run() {

try {

String path = image_path.getText().toString();

Log.i("FUCK", "path:" + path);

byte[] data = ImageService.getImage(path);

bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

// 处理完毕后给handler发送消息

Message msg = new Message();

msg.what = 1;

handler.sendMessage(msg);

} catch (Exception e) {

e.printStackTrace();

}

}

};

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

if (msg.what == 1) {

imageview.setImageBitmap(bitmap);

}

}

};

将按键中处理的任务,放到一个新的线程中,按键后启动该线程:

public void onClick(View v) {

new Thread(downloadRun).start();

}

当然处理图片显示的要放到Handler中显示。

这样就攻克了这个问题。

还有因为不关心Java Web开发,所以选择百度的Logo作为攻取图片的路径:

http://www.baidu.com/img/bdlogo.gif

显示结果例如以下:

52_发送状态栏通知

本课过程中,没有遇到错误,只是在发送通知的时候提示用的API已经过时了,所以找了一下新的用法:(參考)

原始API实现:

public void send(View v){

String tickkerText = shorttitileText.getText().toString();

String title = titleText.getText().toString();

String content = contentText.getText().toString();

int icon = android.R.drawable.stat_notify_chat;

Notification notification = new Notification(icon, tickkerText, System.currentTimeMillis());

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:194949494"));

PendingIntent pendingIntent = PendingIntent.getActivity(this, 10, intent, 0);

notification.setLatestEventInfo(this, title, content, pendingIntent);

notification.defaults = Notification.DEFAULT_SOUND;

notification.flags = Notification.FLAG_AUTO_CANCEL;

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

manager.notify(100, notification);

}

新API实现:

public void sendNew(View v){

String tickkerText = shorttitileText.getText().toString();

String title = titleText.getText().toString();

String content = contentText.getText().toString();

int icon = android.R.drawable.stat_notify_chat;

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:194949494"));

PendingIntent pendingIntent = PendingIntent.getActivity(this, 10, intent, 0);

Notification notification = new Notification.Builder(this)

.setSmallIcon(icon)                   // => Notification         第一个參数

.setTicker(tickkerText)                 // => Notification         第二个參数

.setWhen(System.currentTimeMillis())   // => Notification         第三个參数

.setContentTitle(title)                  // => setLatestEventInfo   第二个參数

.setContentText(content)               // => setLatestEventInfo   第三个參数

.setContentIntent(pendingIntent)        // => setLatestEventInfo   第四个參数

.setDefaults(Notification.DEFAULT_SOUND)

// => notification.defaults = Notification.DEFAULT_SOUND

.setAutoCancel(true)

// => notification.flags = Notification.FLAG_AUTO_CANCEL

.build();

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

manager.notify(100, notification);

}

学习OK。

53_採用网页设计软件界面

一般键盘的測试程序的界面就是用JS做出来的。网页要比xml布局easy一些。只是仅仅适用简单一个的。比方表格等等。

54_tween动画

帮助文档路径:docs/guide/topics/resources/animation-resource.html

关于translate的文档样例没有错误了。默认会停留在移动结束后的位置。且使用

animation.setFillAfter(true);

不管true或者false都无效。

学习OK。

55_frame动画的实现

在没有加入例如以下代码的时候,直接调用drawable.start()动画仍然是能够開始的:

getMainLooper().myQueue().addIdleHandler(

new MessageQueue.IdleHandler() {

@Override

public boolean queueIdle() {

drawable.start();

return false;

}

});

关于getMainLooper().myQueue().addIdleHandler的详细作用有行研

Android应用基础学习记录的更多相关文章

  1. MVC+Ext.net零基础学习记录(五)

    继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...

  2. MVC+Ext.net零基础学习记录(四)

    在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...

  3. MVC+Ext.net零基础学习记录(一)

    由于最近开发一个项目,决定使用MVC+EXT.NET,决定将学习的这个过程记录下来 本人和很多菜鸟一样,之前既没有使用过MVC开发,也没有接触过EXT.NET,所以这将是一个大家共同学习的过程,文章中 ...

  4. 【JSP】JSP基础学习记录(四)—— Servlet

    序: 众所周知JSP的基础也就是Servlet,如果单纯用Servlet类来响应用户的HTTP请求可以吗?答案是肯定的.JSP中的9个内置对象只是自动帮我们初始化的,没有他们一样可以实现web.只是工 ...

  5. Android 零基础学习之路

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正則表達式. 3.面向对象的抽象.封装,继承,多态.类与对象.对象初始化 ...

  6. android IOC框架学习记录

    一.框架如下几种: 1.Roboguice   2.Spring for Android   3.afinal   4.xUtils   二.Roboguice说明 项目地址:https://gith ...

  7. 【JSP】JSP基础学习记录(三)—— JSP的9个内置对象

    本节说一下JSP中的9个内置对象.这9个内置对象都是Servlet API接口的实例,只是JSP规范对他们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例 ...

  8. 【JSP】JSP基础学习记录(二)—— JSP的7个动作指令

    2.JSP的7个动作指令: 动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作.编译指令在将JSP编译成Servlet时起作用:而处理指令通常可替换成JSP ...

  9. 【JSP】JSP基础学习记录(一)—— 基础介绍以及3个编译指令

    序: 从实现到现在一直是以.net为主,但偶尔也会参与一些其他语言的项目.最近需要对一个Java Web项目进行二次开发,一直没学习过JSP所以买了几本书自学试试.参考资料为<轻量级Java E ...

随机推荐

  1. 杭电 1596 find the safest road (最小路径变形求最大安全度)

    Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的 ...

  2. 算法导论 第三章 and 第四章

    第三章 渐进的基本O().... 常用函数 % 和  // 转换 斯特林近似公式 斐波那契数 第四章 分治策略:分解(递归)--解决(递归触底)--合并 求解递归式的3种方法: 1:代入法(替代法): ...

  3. jQuery对象数据缓存Cache原理及jQuery.data详解

    网上有很多教你怎么使用jQuery.data(..)来实现数据缓存,但有两个用户经常使用的data([key],[value])和jQuery.data(element,[key],[value])几 ...

  4. Java学习之理解递归

    Java支持递归.递归是根据自身定义内容的过程.就Java编程而言,递归是一个允许方法调用自身的特性.调用自身的方法被称为递归.典型的例子就是阶乘的计算,N的阶乘就是从1到N之间所有整数的乘积. 当方 ...

  5. 在JavaScript中获取Map集合中的key和value值(前提是:既不知道key为什么值,也不知道value有哪些值)

  6. Python+fiddler(基于Cookie绕过验证码自动登录)

    案例:使用Cookie绕过百度验证码自动登录账户 步骤: 1.浏览器进入百度首页,点击登录按钮,输入相关信息(注意:暂时不要点击登录按钮) 2.进入fiddler,首先获取证书,Tools--> ...

  7. NYOJ27水池数目,类似于FZU1008最大黑区域,简单搜索题~~~

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上 ...

  8. CSU 1290 DP解决数学期望问题

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1290 题目大意: 给定k个数,每次可以生成0-N-1中的任何一个数,k个数中出现不同的整 ...

  9. tree(poj 1741)

    题意:给一颗n个节点的树,每条边上有一个距离v(v<=1000).定义d(u,v)为u到v的最小距离.给定k值,求有多少点对(u,v)使u到v的距离小于等于k. /* 照着点分治模板敲了敲,有很 ...

  10. 大话数据结构——KMP算法(还存在问题)

    http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html /*#include& ...