lost in android
Linux 环境搭建
java sdk的安装 jdk-6u21-linux-i586.bin
android sdk的安装 android-sdk-linux_x86
环境变量的配制
eclips的安装和配制 eclipse-java-helios-SR1-linux
eclipse IDE for java Developers 3.5.2
安装jdk
chmod 777 jdk-6u21-linux-i586.bin #(修改权限可执行)
./jdk-6u21-linux-i586.bin #(安装jdk)
android sdk的安装 android-sdk-linux_x86
环境变量的配制
cd /etc
ls -l | grep profile #(查看管理员账号)
sudo vim profile #(修改写入系统变量)
export JAVA_HOME=/home/mars/downlods/jdk1.6.0_21
export PATH=$PATH:$JAVA_HOME/bin:/home/mars/tools/android-sdk-liunx_x86/tools
测试环境变量
javac java -version which java
adb which adb
android
android 四大天王之
activity 应用界面
intent 传输数据
service 提供服务支持
Content Provider 负责存储数据
android 安装配制
下载sdk http://developer.android.com/index.html
下载ADT eclips 插件 http://developer.android.com/sdk/eclipse-adt.html
创建Activity的要点
1、创建activity就是一个类,并且这个类要继承Activity
2、需要复写onCreate方法
3、每一个Activity都需要在AndroidManifest.xml文件当中进行配制
4、为Activity添加必要的控件
android:orientation="vertical"
它确定了LinearLayout的方向,其值可以为
*vertical, 表示垂直布局
*horizontal, 表示水平布局
android:layout_width="fill_parent"
android:layout_height="fill_parent"
分别指明了在父控件中当前控件的宽和高,可以设定其确定的值,但一般使用下面两个值
*fill_parent,填满父控件的空白
*wrap_content,表示大小刚好足够显示当前控件里的内容
android:gravity="center_horizontal"
如果是没有子控件的view设置此属性,表示内容的对齐方式;如果是有子控件的view设置此属性,则表示子控件的对齐方式(重力倾向),其值如下(需要多个时,用“|”分开)
*top
*bottom
*left
*right
*center_vertical
*center_horizontal
*center
*fill_vertical
*fill_horizontal
*fill
实例:基本布局如下:
[img]http://dl.iteye.com/upload/attachment/534204/4d76d509-570c-3b65-a9d8-da4ebb5aa870.jpg[/img]
多个Activity之间的关系(startActivity(Intentintent))
Intent的基本作用
一个Intent对象包含了一组信息
1、Component name
2、Action
3、Data
4、Category
5、Extras
6、Flags
使用Intent发送消息
......
Uri uri = Uri.parse("smsto://08000001")
Intent intent = new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra("sms_body","the sms text");
startActivity(intent);
......
实例:通过Intent进入不同Activity
常用控制使用方法
TextView、EditText、Button、Menu的使用方法
Activity的生命周期(生命周期如下)
启动第一个Activity
FirstAction onCreate onStart onResume
从第一个Activity启动第二个Activity
FirstAction onPause
SecondAction onCreate onStart onResume
FirstAction onStop
返回
SecondAction onPause
FirstAction onRestart onStart onResume
SecondAction onStop onDestroy
Task运行的过程
android每启动activity都会将activity存入Task当中,android将Task(栈)中将显示最后一个action
常用控件使用:
RadioGroup、RadioButton、CheckBox、Toast
ProgressBar、ListView
Handler的使用
使用消息队列,达到异步后台处理
1、Handler与线程是处于同一个线程当中,他直接调用run方法,而不是调用start,并没有启用新线程。
实例1:
2、Bundle 是一种特殊map容器
实例2:
SQLite使用方法(内置文本型关系型数据库)
1、SQLite介绍
官网:http://www.sqlite.org/
2.SQLiteOpenHelper使用方法
adb shell(可以使用liunx命令)
DDMS程序调试
通过Log.d("debug","this is error!");
文件下载步骤
创建一个HttpURLVonnection对象
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
获得一个InputStream对象
urlConn.getInputStream()
访问网络的权限
android.permission.INTERNET
访问SDCARD
得到当前设备SD卡的目录
Environment.getExternalStorageDirectory()
访问SD卡的权限:
android.permission.WRITE_EXTERNAL_STORAGE
Content Provider组件(数据接口、数据共享)
Content Provider基本概念
1、Content Provider提供为存储和获取数据提供了统一的接口
2、使用ContentProvider可以在不同的应用程序间共享数据
3、Android为常见的一些数据提供了ContentPrivider(包括音频,视频,图片和通讯录等等)
ContentProvider使用表的形式来组织数据(_ID NUMBER NUMBER_KEY LABEL NAME TYPE)
URL
1、每一个ContentProvicer都拥有一个公共的URL,这个URL用于表示这个ContentProvicer所提供的数据。
2、Android所提供的ContentProvicer都存放在android.provicer包当中。
ContentProvider所提供的函数
1、query() : 查询
2、insert() : 插入
3、update() : 更新
4、delete() : 删除
5、getType() : 得到数据类型
6、onCreate() : 创建时的回调函数
实现ContentProvicer的过程
1、定义一个CONTENT_URL常量
2、定义一个类,继承ContetProvicer
3、实现query,insert,update,delete,getType和onCreate方法
4、在AndoidManifest.xml当中进行声明
xml文件解析
sax,全称Simple ApI for XML,既是一种接口,也是一个软件包。
作为接口,sax是事件驱动型xml解析的一个标准接口。
sax的原理
sax的工作原理简单地说是对文档进行顺序扫描,当事件到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
大多数sax实现都会产生以下类型的事件:
在文档的开始和结束时触发文档处理事件。
在文档内每一xml元素接受解析的前后触发元素事件。
任何元数据通常都由单独的事件交付。
在处理文档的DTD或Schema时产生DTD或Schema事件。
产生错误事件用来通知主机应用程序解析错误。
sax的常用接口介绍
ContentHandler是java类包中的一个特殊的sax接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当xml解析器开始解析xml输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的相应的方法来响应该事件。
ContentHandler接口的方法有以下几种:
void startDocument()
void endDocument()
void startElement(string uri,String localName,String qName,Attributes atts)
void endElement(String uri,String LocalName,String qName)
void characters(char[] ch,int start,int length)
广播机制
注册BroadcastReceiver的方法
broadcastReceiver用户监听被广播的事件(intent)为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:
1、在应用程序的代码当中进行注册
注册BroadcastReceiver:
registerReceiver(receiver,filter);
取消注册BroadcastReceiver:
如果一个BroadcastReceiver用于更新UI,那么通常会使用这种方法进行注册,在Activity启动的时候注册BroadcastReceiver,在Activity不可见以后取消注册。
2、在androidManifest.xml当中进行注册
<receiver android:name=".BrodCastReceiver">
<intent-filter>
<action android:name="android.intent.action.EDIT"/>
</intent-filter>
</receiver>
使用这样的方式注册的BrodcastReceiver,即使应用程序没有启动,或者被kill掉以后,也始终处于活动状态状态
Android内置的Broadcast Actions
在Android平台当中,内置了很多Action,用于帮助开发者监听手机上所发生各种事件,一下是一些比较常见的Action,完事的Action列表可以参考:
Action名称 触发场景
ACTION_CAMERA_BUTTON Broadcast Action:The "Camera Button" was pressed.
ACTION_BATTERY_LOW Broadcast Action:Indicates low battery condition on the device.
ACTION_DATE_CHANGED Broadcast Action:The date has changed.
ACTION_POWER_CONNECT Broadcast Action:External power has bean connected to the device.
ACTION_REBOOT Broadcast Action:Have the device reboot.
ACTION_SCREEN_ON Broadcast Action:Sent after the screen turns on.
WIFI 网络操作
1、什么是WIFI
WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。
2、WIFI网卡的状态
WIFI网卡的状态是由一系列的整形常量来表示的:
1、WIFI_STATE_DISABLED: WIFI网卡不可用
2、WIFI_STATE_DISABLING: WIFI正在关闭
3、WIFI_STATE_ENABLED: WIFI网卡可用
4、WIFI_STATE_ENABLING: WIFI网卡正在打开
5、WIFI_STATE_UNKNOWN: 未知网卡状态
操作WIFI网卡所需的权限
关于操作权限,可以在帮助文档当中找到完整的列表,在这里列出和网络相关的部分权限:
权限名称 描述
CHANGE_NETWORK_STATE Allows applications to change network connectivity state
CHANGE_WIFI_STATE Allows applications to change Wi-Fi connectivity state
ACCESS_NETWORK_STATE Allows applications to access information about networks
ACCESS_WIFI_STATE Allows applications to access information about Wi-Fi networks
3、改变WIFI网卡的状态
对WIFI网卡进行操作需要通过WIFIManager对象牙塔来进行获取该对象的方法如下:
WifiManager wifiManager = (WifiManager) ContextActivity.this.getSystemService(Context.WIFI_SERVICE);
打开WIFI网卡
wifiManager.setWifiEnabled(true);
关闭WIFI网卡
wifiManager.setWifiEnabled(false);
获取网卡当前的状态
wifiManager.getWifiState();
Socket编程
Socket的英文原意是“插座”
所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。
应用程序通常通过“套接安”向网络发出请求或者应答网络请求。
Service编程
Service是什么
Service是一个应用程序组件
Service没有图形化界面
Service通常用来处理一些耗时比较长的操作
可以使用Service更新ContentProvider,发送Intent以及启动系统的通知等待
Service不是什么
Service不是一个单独的进程。
Service不是一个线程
项目功能分析
MP3播放器主要功能
1、播放MP3文件
2、在播放MP3文件的同时显示歌词
3、从服务器下载歌词列表
4、从服务器下载MP3和LRC文件
代码编写
1、下载服务器端的XML文件
2、解析XML文件
3、完成文件列表更新
卸载程序 adb uninstall XXX
Linux 环境搭建
java sdk的安装 jdk-6u21-linux-i586.bin
android sdk的安装 android-sdk-linux_x86
环境变量的配制
eclips的安装和配制 eclipse-java-helios-SR1-linux
eclipse IDE for java Developers 3.5.2
安装jdk
chmod 777 jdk-6u21-linux-i586.bin #(修改权限可执行)
./jdk-6u21-linux-i586.bin #(安装jdk)
android sdk的安装 android-sdk-linux_x86
环境变量的配制
cd /etc
ls -l | grep profile #(查看管理员账号)
sudo vim profile #(修改写入系统变量)
export JAVA_HOME=/home/mars/downlods/jdk1.6.0_21
export PATH=$PATH:$JAVA_HOME/bin:/home/mars/tools/android-sdk-liunx_x86/tools
测试环境变量
javac java -version which java
adb which adb
android
android 四大天王之
activity 应用界面
intent 传输数据
service 提供服务支持
Content Provider 负责存储数据
android 安装配制
下载sdk http://developer.android.com/index.html
下载ADT eclips 插件 http://developer.android.com/sdk/eclipse-adt.html
创建Activity的要点
1、创建activity就是一个类,并且这个类要继承Activity
2、需要复写onCreate方法
3、每一个Activity都需要在AndroidManifest.xml文件当中进行配制
4、为Activity添加必要的控件
android:orientation="vertical"
它确定了LinearLayout的方向,其值可以为
*vertical, 表示垂直布局
*horizontal, 表示水平布局
android:layout_width="fill_parent"
android:layout_height="fill_parent"
分别指明了在父控件中当前控件的宽和高,可以设定其确定的值,但一般使用下面两个值
*fill_parent,填满父控件的空白
*wrap_content,表示大小刚好足够显示当前控件里的内容
android:gravity="center_horizontal"
如果是没有子控件的view设置此属性,表示内容的对齐方式;如果是有子控件的view设置此属性,则表示子控件的对齐方式(重力倾向),其值如下(需要多个时,用“|”分开)
*top
*bottom
*left
*right
*center_vertical
*center_horizontal
*center
*fill_vertical
*fill_horizontal
*fill
实例:基本布局如下:
[img]http://dl.iteye.com/upload/attachment/534204/4d76d509-570c-3b65-a9d8-da4ebb5aa870.jpg[/img]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">星座运势</string>
<string name="app_title">女巫店每周星座运势</string>
<string name="app_xinzhan">猴子座\nlen\n23/7-22/8\n20100609-20100616</string>
<string name="app_info">狮子座身心坦荡的一周。全力以赴,问心无愧。狮子座们本月主运落在各种组合与关系的重建与稳定,对于单身的狮子座们来说,则是拥有稳定情感,相互告白的一周。事业学业财富平稳的基础上,思考人生未来的方向与爱人的互动变成重点,越来越清楚自己想要的是什么,越来越知道生活的方向在哪里,可能会经历痛苦的调整期,但相信吧,你的未来确实是越来越好的。财务身体都稳定。\n 爱情是心的方向。\n幸运色:鹅黄色\n提防星座:白羊\n幸运星座:水瓶\n\n来源地址:http://nownow.blogbus.com/logs/65538590.html</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="0,2"
android:background="@android:color/black"
>
<TableRow>
<ImageView android:background="@android:color/black"
android:src="@drawable/left"
android:layout_column="0"
android:scaleType="center"
android:layout_width="48px"
android:layout_height="58px"
android:padding="5dip"
/>
<TextView
android:id="@+id/XinZhan"
android:layout_column="1"
android:layout_width="120px"
android:layout_height="63px"
android:gravity="center_vertical"
android:padding="5dip"/>
<ImageView android:background="@android:color/black"
android:layout_column="2"
android:src="@drawable/right"
android:scaleType="center"
android:layout_width="48px"
android:layout_height="58px"
android:padding="5dip"
/>
</TableRow>
<TableRow>
<TextView
android:id="@+id/info"
android:layout_column="0"
android:layout_width="fill_parent"
android:layout_height="250px"
android:layout_span="3"
android:padding="10dip"/>
</TableRow>
<ImageView android:background="@android:color/black"
android:src="@drawable/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="0dp"
>
</ImageView>
</TableLayout>
package mars.activity;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Activity01 extends Activity {
private TextView XinZhan;
private TextView Info;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.app_title);
setContentView(R.layout.main);
XinZhan = (TextView) this.findViewById(R.id.XinZhan);
Info = (TextView) this.findViewById(R.id.info);
XinZhan.setText(R.string.app_xinzhan);
Info.setText(R.string.app_info);
}
}
多个Activity之间的关系(startActivity(Intentintent))
Intent的基本作用
一个Intent对象包含了一组信息
1、Component name
2、Action
3、Data
4、Category
5、Extras
6、Flags
使用Intent发送消息
......
Uri uri = Uri.parse("smsto://08000001")
Intent intent = new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra("sms_body","the sms text");
startActivity(intent);
......
实例:通过Intent进入不同Activity
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Activity02"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="OtherActivity" android:label="@string/app_name2"></activity>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Intent实例</string>
<string name="app_button">进入</string>
<string name="app_button1">返回</string>
<string name="app_name1">Activity02</string>
<string name="app_name2">OtherActivity</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/app_button"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/app_button1"/>
</LinearLayout>
package cn.com;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Activity02 extends Activity {
private Button mybutton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.app_name1);
setContentView(R.layout.main);
mybutton = (Button) this.findViewById(R.id.mybutton);
mybutton.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("testIntent","this is Test Intent");
intent.setClass(Activity02.this, OtherActivity.class);
Activity02.this.startActivity(intent);
}});
}
}
package cn.com;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class OtherActivity extends Activity {
private Button mybutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.app_name2);
setContentView(R.layout.other);
Intent intent = this.getIntent();
String value = intent.getStringExtra("testIntent");
Toast.makeText(OtherActivity.this, value, Toast.LENGTH_LONG).show();
mybutton = (Button) this.findViewById(R.id.mybutton);
mybutton.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(OtherActivity.this, Activity02.class);
OtherActivity.this.startActivity(intent);
}});
}
}
常用控制使用方法
TextView、EditText、Button、Menu的使用方法
Activity的生命周期(生命周期如下)
启动第一个Activity
FirstAction onCreate onStart onResume
从第一个Activity启动第二个Activity
FirstAction onPause
SecondAction onCreate onStart onResume
FirstAction onStop
返回
SecondAction onPause
FirstAction onRestart onStart onResume
SecondAction onStop onDestroy
Task运行的过程
android每启动activity都会将activity存入Task当中,android将Task(栈)中将显示最后一个action
常用控件使用:
RadioGroup、RadioButton、CheckBox、Toast
ProgressBar、ListView
Handler的使用
使用消息队列,达到异步后台处理
1、Handler与线程是处于同一个线程当中,他直接调用run方法,而不是调用start,并没有启用新线程。
实例1:
package cn.com;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class HandlerThread extends Activity {
private Handler handler = new Handler();
private Runnable r = new Runnable(){
public void run() {
System.out.println("handler---->"+Thread.currentThread().getId());
System.out.println("handlername---->"+Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler.post(r);
// Thread th = new Thread(r);
// th.start();
System.out.println("activte---->"+Thread.currentThread().getId());
System.out.println("activtename---->"+Thread.currentThread().getName());
}
}
2、Bundle 是一种特殊map容器
实例2:
package cn.com;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
public class HanderLoop extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("Activity-->"+Thread.currentThread().getId());
HandlerThread handlerThread = new HandlerThread("handler_thread");
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage();
msg.obj = "abc";
Bundle b = new Bundle();
b.putInt("age", 20);
b.putString("name", "Jim");
msg.setData(b);
msg.sendToTarget();
}
class MyHandler extends Handler{
public MyHandler(){
}
public MyHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
String s = (String) msg.obj;
Bundle b = msg.getData();
int age = b.getInt("age");
String name = b.getString("name");
System.out.println("obj-->"+s);
System.out.println("age is "+age+" name is "+name);
System.out.println("Handler-->"+Thread.currentThread().getId());
System.out.println("handerMessage");
}
}
}
SQLite使用方法(内置文本型关系型数据库)
1、SQLite介绍
官网:http://www.sqlite.org/
2.SQLiteOpenHelper使用方法
adb shell(可以使用liunx命令)
DDMS程序调试
通过Log.d("debug","this is error!");
文件下载步骤
创建一个HttpURLVonnection对象
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
获得一个InputStream对象
urlConn.getInputStream()
访问网络的权限
android.permission.INTERNET
访问SDCARD
得到当前设备SD卡的目录
Environment.getExternalStorageDirectory()
访问SD卡的权限:
android.permission.WRITE_EXTERNAL_STORAGE
Content Provider组件(数据接口、数据共享)
Content Provider基本概念
1、Content Provider提供为存储和获取数据提供了统一的接口
2、使用ContentProvider可以在不同的应用程序间共享数据
3、Android为常见的一些数据提供了ContentPrivider(包括音频,视频,图片和通讯录等等)
ContentProvider使用表的形式来组织数据(_ID NUMBER NUMBER_KEY LABEL NAME TYPE)
URL
1、每一个ContentProvicer都拥有一个公共的URL,这个URL用于表示这个ContentProvicer所提供的数据。
2、Android所提供的ContentProvicer都存放在android.provicer包当中。
ContentProvider所提供的函数
1、query() : 查询
2、insert() : 插入
3、update() : 更新
4、delete() : 删除
5、getType() : 得到数据类型
6、onCreate() : 创建时的回调函数
实现ContentProvicer的过程
1、定义一个CONTENT_URL常量
2、定义一个类,继承ContetProvicer
3、实现query,insert,update,delete,getType和onCreate方法
4、在AndoidManifest.xml当中进行声明
xml文件解析
sax,全称Simple ApI for XML,既是一种接口,也是一个软件包。
作为接口,sax是事件驱动型xml解析的一个标准接口。
sax的原理
sax的工作原理简单地说是对文档进行顺序扫描,当事件到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
大多数sax实现都会产生以下类型的事件:
在文档的开始和结束时触发文档处理事件。
在文档内每一xml元素接受解析的前后触发元素事件。
任何元数据通常都由单独的事件交付。
在处理文档的DTD或Schema时产生DTD或Schema事件。
产生错误事件用来通知主机应用程序解析错误。
sax的常用接口介绍
ContentHandler是java类包中的一个特殊的sax接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当xml解析器开始解析xml输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的相应的方法来响应该事件。
ContentHandler接口的方法有以下几种:
void startDocument()
void endDocument()
void startElement(string uri,String localName,String qName,Attributes atts)
void endElement(String uri,String LocalName,String qName)
void characters(char[] ch,int start,int length)
广播机制
注册BroadcastReceiver的方法
broadcastReceiver用户监听被广播的事件(intent)为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:
1、在应用程序的代码当中进行注册
注册BroadcastReceiver:
registerReceiver(receiver,filter);
取消注册BroadcastReceiver:
如果一个BroadcastReceiver用于更新UI,那么通常会使用这种方法进行注册,在Activity启动的时候注册BroadcastReceiver,在Activity不可见以后取消注册。
2、在androidManifest.xml当中进行注册
<receiver android:name=".BrodCastReceiver">
<intent-filter>
<action android:name="android.intent.action.EDIT"/>
</intent-filter>
</receiver>
使用这样的方式注册的BrodcastReceiver,即使应用程序没有启动,或者被kill掉以后,也始终处于活动状态状态
Android内置的Broadcast Actions
在Android平台当中,内置了很多Action,用于帮助开发者监听手机上所发生各种事件,一下是一些比较常见的Action,完事的Action列表可以参考:
Action名称 触发场景
ACTION_CAMERA_BUTTON Broadcast Action:The "Camera Button" was pressed.
ACTION_BATTERY_LOW Broadcast Action:Indicates low battery condition on the device.
ACTION_DATE_CHANGED Broadcast Action:The date has changed.
ACTION_POWER_CONNECT Broadcast Action:External power has bean connected to the device.
ACTION_REBOOT Broadcast Action:Have the device reboot.
ACTION_SCREEN_ON Broadcast Action:Sent after the screen turns on.
WIFI 网络操作
1、什么是WIFI
WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。
2、WIFI网卡的状态
WIFI网卡的状态是由一系列的整形常量来表示的:
1、WIFI_STATE_DISABLED: WIFI网卡不可用
2、WIFI_STATE_DISABLING: WIFI正在关闭
3、WIFI_STATE_ENABLED: WIFI网卡可用
4、WIFI_STATE_ENABLING: WIFI网卡正在打开
5、WIFI_STATE_UNKNOWN: 未知网卡状态
操作WIFI网卡所需的权限
关于操作权限,可以在帮助文档当中找到完整的列表,在这里列出和网络相关的部分权限:
权限名称 描述
CHANGE_NETWORK_STATE Allows applications to change network connectivity state
CHANGE_WIFI_STATE Allows applications to change Wi-Fi connectivity state
ACCESS_NETWORK_STATE Allows applications to access information about networks
ACCESS_WIFI_STATE Allows applications to access information about Wi-Fi networks
3、改变WIFI网卡的状态
对WIFI网卡进行操作需要通过WIFIManager对象牙塔来进行获取该对象的方法如下:
WifiManager wifiManager = (WifiManager) ContextActivity.this.getSystemService(Context.WIFI_SERVICE);
打开WIFI网卡
wifiManager.setWifiEnabled(true);
关闭WIFI网卡
wifiManager.setWifiEnabled(false);
获取网卡当前的状态
wifiManager.getWifiState();
Socket编程
Socket的英文原意是“插座”
所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。
应用程序通常通过“套接安”向网络发出请求或者应答网络请求。
Service编程
Service是什么
Service是一个应用程序组件
Service没有图形化界面
Service通常用来处理一些耗时比较长的操作
可以使用Service更新ContentProvider,发送Intent以及启动系统的通知等待
Service不是什么
Service不是一个单独的进程。
Service不是一个线程
项目功能分析
MP3播放器主要功能
1、播放MP3文件
2、在播放MP3文件的同时显示歌词
3、从服务器下载歌词列表
4、从服务器下载MP3和LRC文件
代码编写
1、下载服务器端的XML文件
2、解析XML文件
3、完成文件列表更新
卸载程序 adb uninstall XXX