android基础

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]


<?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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值