android札记2

android笔记2smsManager.divideMessage(content)前提是这个短信内容不为空;scAddress,短信中心地址,如果

android笔记2

smsManager.divideMessage(content);前提是这个短信内容不为空;
scAddress,短信中心地址,如果没有则为NULL
sentIntent用于判断发送是否成功,是移动网络返给手机的一个信号,(网络)
deliveryIntent对方是否受到,是移动网络返给手机的一个信号,这两个都是采用的异步的方式,没有则设为NULL
发送短信也要获得权限,

中文是有乱码问题的,这个不用管它, 是操作系统的问题;
cn.itcast.Junit是应用所在的包,
继承AndroidTestCase是用于得到这个应用的上下文Sys,
有例外就要抛出,Exception ,Throwable是Exception的父类,

要实现单元测试,就要引入一个单元测试包,和类,单元测试一定要放到应用所在包里面
<uses-library android:name="android.test.runner" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
? android:targetPackage="cn.itcast.action" android:label="Tests for My App" />
-------------------------------------------------?
LogCat这是Androider的专门的控制台
Log.i(tag,e.toString)
pirvate static final String tag="类名";
Log.e(tag,e.toString);e.toString是错误信息,
这是日志的输出,它是往控制台的输出,

---------------------------------------------------
开发的步骤 :activity
1.先开发Service,A.单元测试
2,开发UI
3。Activity{
?? a.添加用户事件,
?? b.调用Service方法完成相应功能,
?? }
----------------------
在业务层如果有例外,就要抛出,这是为了给客户一个清楚的异常信息,
this.openFileOutput("itcast.txt",ContextMode
_PRIVATE);第二个参数是操作模式;
有四种操作模式:
Context.MODE_PRIVATE

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,
写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
------------------------------------------
在内部类中要访问外部类这样写FileActivity.this这个代表的就是外部类;

Activity可以看作是Context对像

吐丝会安你指定的时间显示并关闭一个小的方框Toast;
Toast.makeText(Context context,CharSequence,)

1是两三秒钟
0是一秒钟
错误信息就用e, Log.e(tag,msg);
shift+ctrl+y小写/x大写


android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,
当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,
任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),
其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,
只有这样其他程序才能正确访问。

-------------------------------------------------------
在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:
在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:
mksdcard 2048M D:\AndroidTool\sdcard.img

?

在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-------------------------------------------
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
???????? File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录
???????? File saveFile = new File(sdCardDir, “itcast.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("传智播客".getBytes());
outStream.close();
}
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:
File sdCardDir = new File("/sdcard"); //获取SDCard目录
File saveFile = new File(sdCardDir, "itcast.txt");
//上面两句代码可以合成一句: File saveFile = new File("/sdcard/itcast.txt");
--------------------------------------------------------
如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。
FileInputStream inStream = this.getContext().openFileInput("itcast.txt");
Log.i("FileTest", readInStream(inStream));
readInStream()的方法请看本页下面备注。

或者直接使用文件的绝对路径:
File file = new File("/data/data/cn.itcast.action/files/itcast.txt");
FileInputStream inStream = new FileInputStream(file);
Log.i("FileTest", readInStream(inStream));
注意:上面文件路径中的“cn.itcast.action”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录
---------------------------------------------------------
在XML文件里面有两个节点,一个是元素类型节点,一个是文本类型节点,
oooi11是文本类型节点,
在XML文件里面的所有,不是元素类型节点,就是文本类型节点。

SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。
characters(char[] ch, int start, int length)
这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容是XML文件的整个文件的内容;后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。
startDocument()
当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
endDocument()
和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。
startElement(String namespaceURI, String localName, String qName, Attributes atts)
当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得SAX在编程处理上没有DOM来得那么方便。
endElement(String uri, String localName, String name)
这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。
characters(char[] ch, int start, int length) 这个是对应文本类型的;
这个方法用来处理在XML文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。
----------------------------------------------
手机上的CPU 如果是一个G的,但是只是相当于电脑的500M的CPU
手机上的资源是跟电脑没有办法比的,所以尽量少用DOM来解析的;