`

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
实例:基本布局如下:


<?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
  • 大小: 29.9 KB
分享到:
评论

相关推荐

    Android基础教程PPT

    这篇“Android基础教程PPT”旨在引导初学者了解如何使用Eclipse环境进行Android应用开发。首先,我们从创建或导入Android工程开始。 要开启一个新的Android工程,你需要在Eclipse中选择[File]-&gt;[New]-&gt;[Project],...

    Android 基础教程 第三版 PDF 含源码

    《Android基础教程 第三版》是一本针对初学者和进阶开发者的重要参考资料,全面覆盖了Android应用开发的基础知识。此版本的PDF版本以其高质量的文本和包含源码的特点,为学习者提供了便捷的学习途径。书中的内容围绕...

    Android基础教程(第3版·修订版)

    ### Android基础教程(第3版·修订版)关键知识点概览 #### 一、书籍概述与定位 《Android基础教程(第3版·修订版)》是一部专为Android开发新手及中级开发者准备的基础教程。本书延续了Pragmatic系列图书的一贯风格...

    android 基础教程(第三版)配套源码

    《Android基础教程(第三版)》是一本深受开发者欢迎的指南,它涵盖了Android开发的核心概念和技术,旨在帮助初学者和有经验的开发者更好地理解和实践Android应用开发。这本书的配套源码提供了丰富的实例,使得读者...

    Android基础-02

    在Android基础的学习中,"Android基础-02"这一主题主要涵盖了Android开发的基本概念和核心组件,这些都是构建Android应用程序的基础。下面将详细讲解这些知识点。 首先,Android是一种基于Linux内核的操作系统,...

    Android基础教程4

    **Android基础教程4** 在Android开发的学习过程中,基础教程4主要涵盖了Android开发的多个关键方面,包括用户界面设计、文件存取、数据库编程、应用程序管理、权限控制以及资源管理等核心概念。以下是对这些主题的...

    2015最新Android基础入门教程.pdf

    2015年发布的这份Android基础入门教程详细介绍了Android系统架构、开发环境的搭建、用户界面设计以及各种基础知识点,为初学者提供了系统的学习路径。 首先,教程介绍了Android系统的基本概念,包括系统架构和应用...

    2015最新Android基础入门教程PDF版打包合集

    这个"2015最新Android基础入门教程PDF版打包合集"是为初学者准备的宝贵资源,旨在帮助他们快速掌握Android应用开发的基本概念和技术。以下是这个教程合集中可能包含的一些关键知识点: 1. **Android简介**:首先,...

    Android基础教程 第4版

    《Android基础教程 第4版》是一本针对初学者和进阶者全面介绍Android开发的书籍。本书涵盖了Android开发的基础知识,旨在帮助读者掌握构建Android应用的核心技能。在深入学习之前,我们先了解一下Android系统的基本...

    Android基础与应用开发教程

    Android基础与应用开发教程 Android基础与应用开发教程

    2015最新Android基础入门教程PDF版打包合集.rar

    本资源为2015年发布的Android基础入门教程的PDF合集,对于初学者来说,是一份非常有价值的参考资料。在Android开发领域,基础知识是构建所有复杂应用的基础,这份教程将帮助你逐步掌握这一领域的核心概念。 一、...

    Android基础开发与实践

    Android基础开发与实践

    Android基础笔记

    Android 基础笔记 Android 基础笔记是 Android 开发的入门知识点总结,涵盖了 Android 开发的基础知识点,从 Android 发展史到自定义 ContentProvider 的实现。 一、Android 发展史 Android 的发展史可以追溯到 ...

    Android基础教程(第四版)随书源码

    《Android基础教程(第四版)随书源码》是一份宝贵的学习资源,为读者提供了深入理解Android开发的基础。这份源码涵盖了Android应用开发的核心概念和技术,包括用户界面设计、数据存储、网络通信、多媒体处理等多个...

    Android基础入门教程

    Android基础入门教程,网上教程,打包成chm,看得时候方便一些 教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了Android基础入门的大部分知识。

    android基础文档

    《Android学习指南》是针对初学者的一份详尽教程,旨在提供全面的Android基础知识,帮助读者从零开始掌握Android应用开发。这份PDF文档涵盖了Android开发的各个方面,包括环境搭建、编程语言基础、UI设计、数据存储...

    Android零基础教程视频链接

    android基础教程,里边包括新版Android开发教程&笔记1--基础入门,Android开发教程&笔记2--基础入门二,Android开发教程&笔记3--环境搭建与解析,Android开发教程&笔记4--Dalvik ADB Android开发教程+笔记5--模拟器...

    android基础.ppt

    android基础.ppt activety service broadcast contentprovider

    Android基础教程+源码

    **Android基础教程** Android是一种基于Linux内核的开源操作系统,主要应用于移动设备,如智能手机和平板电脑。这个基础教程旨在帮助初学者理解Android开发的基本概念和技术。教程可能涵盖了以下几个核心主题: 1....

Global site tag (gtag.js) - Google Analytics