当前位置:文档之家› android自己做的一些基础笔记

android自己做的一些基础笔记

android自己做的一些基础笔记
android自己做的一些基础笔记

安卓笔记

第一章:安卓的相关知识:

一:3G

1.3G的概念

3G全称为:3rd Generation,中文含义即为第三代数字通信,是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统

2. 符合3G标准的技术

CDMA2000

WCDMA

TD-SCDMA

速度快、融入了多媒体(图片视频等等)

二、智能手机

苹果ios、android、黑莓、塞班、meego、乌邦图(ubuntu---linux)、

火狐os、miui、wp 7、锤子系统

三、android

特点?开源、linux内核、可自定义性强、dalvik虚拟机、OHA联盟

缺点:碎片化(版本太杂了)、屏幕适配问题

四、dalvik虚拟机

1..java--->.dex .java--->.class

2.速度快(基于寄存器的)慢(内存中运算)

3.文件更小

4.自身对硬件要求低对资源做了优化

五、framwork

四层

application java

application framwork java

libraries类库、android runtime (c语言)

linux

六、安装

JDK

Eclipse

ADT(插件)

SDK(android开发工具adb.exe ddms 模拟器、sqlite、draw9patch)

七、安卓项目的文件说明:

例如:helloworld

包名:com.公司名.应用名

继承activity 重写oncreate方法,setContentView(https://www.doczj.com/doc/a94398620.html,yout.main)

src,gen,res,assets,bin

res:drawable(h/l/m),layout,values,raw(图片,音乐,数据),menu,values-v11 v14,anim(animation动画)

package=“com.jky”

包名是一个软件的唯一标识(同包名的软件会替换原来的程序)

android:versionCode=“1”;版本号

android:versionName="1.0"版本名

android:minsdkversion=“8”Sdk最小支持的版本号

(project.properties文件里的#Project target target=android-8标是当前开发使用的版本)

android:icon 软件的图标

android:lable 软件的名字

是android的四大组件之一,作用:专门用于显示,做一些逻辑控制

name名字

lable:一般的一个软件的名字是根据application的lable决定的,但是如果activity里设置了lable,那么软件的名字就会跟随此名字”

是意图过滤器,让别人能调用此activity,隐式调用”

安卓四大组件:Activity,BroadcastReeiver(广播接收者),ContentProvider(内容提供者),Service(服务)。=------------重要

一些异常:res下定义的id无法映射到R.Java文件下

处理方法:res/layout下的xml名不能有大写字母,命名规范为【a-z0-9】

和。选中项目,右键Crean重新编译一下

第二章:电话、短信常用布局

一:电话拨号器:

1.findViewById()有什么样作用

通过布局文件中的属性id拿对象

怎样去激活系统拨号组件

intent.setAction(Intent.ACTION_CALL); //传参数

intent.setData(Uri.parse("tel:"+number));//设置动作数据

startActivity(intent); //激活

电话拨号权限:

二:短信发送器器:

发短信需要使用什么类

SmsManager smsManager=SmsManager.getDefault();//获得短信管理器

smsManager.sendTextMessage(number, null, smg, null, null); //设置数据

Toast.makeText(getApplicationContext(),R.string.success,Toast.LENGTH_LONG)

.Show();//吐司提示,查看发送状态

短信发送权限:

注意:权限的作用是什么?在哪里加

作用:防止恶意软件侵犯用户的隐私,维护手机的安全性

在AndroidManifest.xml里加(电话与短信都需获取权限:)

三:各种简单布局

Activity的方法和生命周期:

--onCreate 一个activity启动时运行(第一次)

--onStart 当activity处于可见状态时运行

--onResume 当activity可以得到用户焦点时(可以被操作)运行

--onPause 当activity处于暂停状态时(例如弹出其他activity而原activity未被完全覆盖),可在此保存数据,以便此activity释放时恢复原状

--onStop 当activity完全不可见时

--onRestart 当activity未被销毁而在此被调用时

--onDestory 当activity被销毁时

当调用finish();语句时,Activity被销毁。

Task

一个包含多个Activity的栈。(栈具有后进先出的结构)。

其中栈的动作只有弹出和压入两个动作,不能进行重新排序。

建立一个对话框风格的Activity

要在Activity的注册文件AndroidManifest中注册时在注册语句后加入代码:

android:label="@string/second"

android:theme="@android:style/Theme.Dialog"

/>

Activity的布局方法:

滚动条的方向属性:scrollbars

带有滚动条的表格布局为GridView

--声明版本和使用的编码

--xml的命名空间

控制线性布局本身的属性:

android:orientation="vertical" --布局的方向(水平,垂直)

android:layout_width="fill_parent" --宽

android:layout_height="fill_parent" --高

>

常用标签:

--TableLayout的使用方法(表格)

--同上

android:layout_width="fill_parent"

android:layout_height="fill_parent"

--行标签

android:id="@+id/row01_text01"

android:text="@string/text01"

android:background="#aa0000"

android:padding="3dip" --表示前后左右的内边距

/>

android:…

………

/>

……..

/>

…..

/>

两个标签嵌套使用可以实现更复杂的Activity。

GirdView的使用--可上下滑动的表格布局

android:id="@+id/gv_apps"

android:layout_height="fill_parent"

android:layout_width="fill_parent"

android:numColumns="3" --表格的列数

android:horizontalSpacing="10px" --表格中的item之间水平方向的间距

android:verticalSpacing="10px" --表格中的item之间的垂直方向的间距

android:listSelector="@drawable/choose_gridview"

--设置当一个item被点击时的背景图片 android:layout_marginTop="28px"

android:layout_marginBottom="58px"

android:layout_marginLeft="5px"

android:layout_marginRight="5px"

>

应用GridView创建一个点击MENU弹出一个选项框

相对布局RelativeLayout:

xmlns:android="https://www.doczj.com/doc/a94398620.html,/apk/res/android"

android:layout_width="fill_parent"

>

可输入文本框标签:

android:id="@+id/edit"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@android:drawable/editbox_background"

——背景为android自定义可输入文本框的一个背景颜色

android:layout_below="@id/text"

这里可以设置一个输入框内的提示文字的属性:hint

/>

获得输入框的值

String nameEdit = nameEdit.getText().toString();

在这里可以使用Intent来传递输入框得到的值到其他的Activity

Intent intent = new Intent();

Intent.putExtra(“键”,”值”);

从Intent得到键值对的值

将一个字符串转换为整形:Int int = Integer.parseInt(string);

第三章:常用控件与适配器

当一个控件中的文字太多而无法全部显示的时候:

android:singleLine="true" --属性是将文字进行单行显示

当设置了上面的属性后就可以设置:

android:ellipsize= --这个属性有多个值,可以设置不能显示时省略号的位置,最后一个值是将不能显示的部分使用走马灯的形式显示出来

除去title和全屏显示(在Activity调用XML之前)

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

--除去title

getWindow().setFlags(https://www.doczj.com/doc/a94398620.html,youtParams.FLAG_FULLSCREEN,

https://www.doczj.com/doc/a94398620.html,youtParams.FLAG_FULLSCREEN);

--全屏显示(除去手机提示栏)

1. RadioGroup和RadioButton --单选按钮

--XMl文档中:

android:id="@+id/radio"

android:…..

android:orientation="vertical" --该属性用于规定下面的单选按钮的布局方式(垂直和水平)

>

android:….

/>

android:….

/>

--java文件中

声明同上面介绍的标签:

private RadioGroup radio = null;

radio = (RadioGroup)findViewById(R.id.radio);

//在RadioGroup上绑定监听器,内部实现Toast方法,监听器的方法与Button的方法不同

radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

// TODO Auto-generated method stub

if(femaleButton.getId() == checkedId){

System.out.println("female");

2.Toast标签-—提示框

//Toast标签用于实现一个短暂的提示消息(常用于提示)

Toast.makeText(RadioActivity.this, "female", Toast.LENGTH_SHORT).show();

}

else if(maleButton.getId() == checkedId){

}

});

3. CheckBox标签--多选按钮

--XMl文件中

android:id="@+id/swim"

android:…..

/>

android:….

/>

--java文件中

声明同上面介绍的标签。

//在CheckButton上绑定监听器,监听器的方法继承CompoundButton

swim.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub

if(isChecked){

System.out.println("CheckBox--->swim is Checked");

}

else{

System.out.println("CheckBox--->swim is unChecked");

}

}

});

5.ListView --列表布局控件

--需要两个XMl文件

第一个XML文件:

>

android:id="@+id/linearlayout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical" --垂直

>

android:id="@+id/android:list" --android内置的命名

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:drawSelectorOnTop="false"

….

第二个XML文件:(用于规定列表中一行的空间)

android:orientation="horizontal" --控件水平排布

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="10dip" --一下为控件的内边距

android:paddingRight="10dip"

android:paddingTop="10dip"

android:paddingBottom="1dip"

>

android:id="@+id/user_name"

android:layout_width="180dip" --规定第一个TextView的宽

android:layout_height="30dip" --规定一行的高

android:textSize="10pt"

android:singleLine="true" --设置单行输入,一旦设置为true,则文字不会自动换行。

/>

android:id="@+id/user_ip"

android:layout_width="fill_parent" --另一个TextView填充剩下的空间

android:layout_height="fill_parent"

android:gravity="right" --内容向右对齐

android:textSize="10pt"

/>

--在java文件中

import …..

public class ListViewTest extends ListActivity {

--这里继承的是ListActivity,而并非Activity

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super…

以下是应用ListView的关键代码

声明:

ArrayList> list = new ArrayList>();

设计的列表中有几行,这里便要声明几行:

HashMap map1 = new HashMap();

HashMap map2 = new HashMap();

HashMap map3 = new HashMap();

在每行中输入要显示的内容的内部名称和内容

map2.put("user_ip", "192.168.0.2");

map2.put("user_name", "lisi");

map3.put("user_ip", "192.168.0.3");

map3.put("user_name", "wangermazi");

在每行中加入声明的内容

list.add(map1);

list.add(map2);

list.add(map3);

链接第二个XMl布局文件

SimpleAdapter listAdapater = new SimpleAdapter(this, list, https://www.doczj.com/doc/a94398620.html,yout.first, new String[]{"user_ip","user_name"},

new int[]{https://www.doczj.com/doc/a94398620.html,er_ip,https://www.doczj.com/doc/a94398620.html,er_name});

应用

setListAdapter(listAdapater);

}

--以下是当点击列表的一行时出发事件的方法

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

// TODO Auto-generated method stub

super.onListItemClick(l, v, position, id);

在这里可以设置一些触发事件,id和position都是从第一行0开始

System.out.println("id-->"+id);

System.out.println("position-->"+position);

}

}

第四章:自定义适配器

步骤:

1.新建一个类继承BaseAdapter类

2.重写父类的方法

实际代码如下:

public class MyAdapter extends BaseAdapter {

//数据

private List customers;

//android上下文

private Context context;

public MyAdapter(Context context,List customers){

this.context = context;

this.customers = customers;

}

/**

* 获取总数

*/

public int getCount() {

return customers.size();

* 根据索引获得item

*/

public Object getItem(int position) {

return this.customers.get(position);

}

/**

* 根据索引获得item的id,customer没有id,我们把索引当做id

*/

public long getItemId(int position) {

return position;

}

/**

* 最关键的方法,实现item适配

*/

public View getView(int position, View convertView, ViewGroup parent) {

//根据上下文获得布局加载器

LayoutInflater layoutInflater = LayoutInflater.from(context);

//根据布局资源文件加载一个布局对象

View view = layoutInflater.inflate(https://www.doczj.com/doc/a94398620.html,yout.list_item, null);

Customer customer = customers.get(position);

((ImageView)view.findViewById(R.id.iv_face)).setImageResource(customer.getFace());

((TextView)view.findViewById(https://www.doczj.com/doc/a94398620.html,_name)).setText(customer.getName());

((TextView)view.findViewById(https://www.doczj.com/doc/a94398620.html,_tel)).setText(customer.getTel());

return view;

}

}

3.在MainActivity.java中

//实例化自定义适配器并且填充数据

MyAdapter adapter = new MyAdapter(this, initCustomers());

lv_customers.setAdapter(adapter);

//设置事件监听

lv_customers.setOnItemClickListener(itemClick);

补充:在自定义的MyAdapter类中获得内容填充器的方法有:1. // LayoutInflater inflater = LayoutInflater.from(context);

inflater.inflate(resource, root)

2.// LayoutInflater inflater2=(LayoutInflater)

context.getSystemService(https://www.doczj.com/doc/a94398620.html,YOUT_INFLATER_SERVICE);

3.// Viewv=View.inflate()

第五章:文件操作

/**

*/

public void writeFile(String name,String content,int mode){

FileOutputStream output = null;

try {

output = context.openFileOutput(name, mode);

output.write(content.getBytes());

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

output.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 往sdcard中的文件写内容

* @param content

*/

// MEDIA_BAD_REMOVAL:表明SDCard 被卸载前己被移除

// MEDIA_CHECKING:表明对象正在磁盘检查

// MEDIA_MOUNTED:表明sd对象是存在并具有读/写权限

// MEDIA_MOUNTED_READ_ONLY:表明对象权限为只读

// MEDIA_NOFS:表明对象为空白或正在使用不受支持的文件系统

// MEDIA_REMOVED:如果不存在SDCard 返回

// MEDIA_SHARED:如果SDCard 未安装,并通过USB 大容量存储共享返回

// MEDIA_UNMOUNTABLE:返回SDCard 不可被安装如果SDCard 是存在但不可以被安装// MEDIA_UNMOUNTED:返回SDCard 已卸掉如果SDCard 是存在但是没有被安装public void writeSdCardFile(String content){

//获取扩展存储器的状态

String state = Environment.getExternalStorageState();

if(state.equals(Environment.MEDIA_MOUNTED)){

File sdDir = Environment.getExternalStorageDirectory();

File file = new File(sdDir,"sdcardFile.txt");

FileWriter writer = null;

try {

if(!file.exists()){

file.createNewFile();

}

writer = new FileWriter(file);

writer.write(content);

} catch (IOException e) {

e.printStackTrace();

}finally{

if(writer!=null){

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

/**

* 读取sd卡中的文件

* @return

*/

写文件时要配置权限:

第六章:SharedPreferences(共享首选项和Pull解析1.Xml的三种解析方式:

dom解析:一次性加载到内存。

sax解析:读一行加载一行。

pull解析:效率高,是基于事件模型的。(不会一次性加载完吧,省内存)

2.pull解析xml步骤

//1.获取解析工厂

XmlPullParserFactory xppf=XmlPullParserFactory.newInstance();

//2.获取pull解析器

XmlPullParser xpp=xppf.newPullParser();

InputStreaminputStream=this.getClass().getResource("xml的文件名").openStream();

//3.指定xml的路劲和编码格式

xpp.setInput(inputStream, "编码格式");

int type=xpp.getEventType();

//4.开始解析

……

//5.代表文档的5部分常量

xpp. START_DOCUMENT:解析到xml文档开始

xpp. END_DOCUMENT:解析到xml文档结束

xpp. START_TAG:解析到xml节点开始

xpp. END_TAG:解析到xml节点结束

xpp. TEXT:解析到文本文档

//6.pull解析器的常用方法

xpp.getAttributeValue(下标):获取当前下标对应某一节点的属性

xpp.nextText():获取下一个节点的文本值

xpp.getName():获取当前节点的节点名

xpp.getEventType():返回当前解析的内容分类,刚开始指向文档头

xpp.next():跳到下一解析部分

3.使用XmlSerializer创建xml步骤

//1.获取pull解析工厂

XmlSerializer xsl=factory.newSerializer();

OutputStream fos=getContext().openFileOutput("my.xml", Context.MODE_PRIVATE); //3.设置xml创建路劲(输出流)和编码格式

xsl.setOutput(fos, "utf-8");。;

//4.编码

……

4. XmlSerializer提供的方法

xsl.startDocument(null, true);设置文档开头

xsl.endDocument(null,true);设置文档结尾

xsl.startTag(null,”节点名”);设置开始节点

xsl.endTag(null,”节点名”);设置结尾节点

xsl.attribute(null,”属性名”,”属性值”);设置节点的属性

xsl.text(“文本值”);设置文本值

5.共享首选项(SharedPreferences)的作用:保存应用参数

6.共享首选项数据保存步骤:

//1.获取SharedPreferences

SharedPreferences spf=getPreferences(保存模式);

//2.通过SharedPreferences获取Editor编辑器

Editor editor=spf.edit();

editor.putString("节点名",”值”);

editor.putBoolean("节点名",值);

editor.putInt("节点名",值);

//3.保存

https://www.doczj.com/doc/a94398620.html,mit();

7.共享首选项数据获取步骤:

//1. 获取SharedPreferences注意路劲要对!!

SharedPreferences spf=getSharedPreferences("文件名",保存模式); //2.解析xml保存到Map集合中

Map m=spf.getAll();

//3.使用数据

第七章Sqlite数据库

1.Sqlite支持的数据类型:integer(整数),text(文本),peal(浮点),blob(大二进制对象)

2.Sql语句格式:

(1)建表:create table 表名(字段名1 约束, 字段名2 约束)

(2)新增:insert into表名(字段名1,字段名2)

(3)修改:update 表名 set字段名1=值, 字段名2=值 where 条件

(4)删除:delete from 表名 where 条件

(5)查询:select * from where 条件

3.约束:primary key(主键),autoincrement(自动增长)

4. SQLiteDatabase类介绍:

(1)作用: SQLiteDatabase类用于操作SQLite数据库.

(2)使用步骤:

//1.传入参数Context(上下文)创建SQLiteDatabas

SQLiteDatabasdb=new MySqliteHelper(上下文);

//3.创建表

db.execSQL(“建表的SQL语句”);

//4.执行增删改查

db.execSQL(“增删改查的SQL语句”);

3.方法介绍:

execSQL(“SQL语句”);

execSQL(“SQL语句”,参数集合);

rawQuery(“SQL查询语句”,参数);返回数据类型为:Curor(游标)

4. Curor游标方法介绍:

Move(int 行数):向上或向下移动指定行数

MoveToFirst():移到第一行

MoveToLast():移到最后一行

moveToNext():移到下一行

moveToPosition():移到指定位置的行

moveToPrevious():移到上一行

5.SQLiteOpenHelper类数据库管理工具的作用:方便数据库的升级。

6. SQLiteOpenHelper类使用步骤:

//1.创建一个MySQLiteOpenHelper类继承SQLiteOpenHelper类

//2.创建只带Context上下文的构造方法

//3.实现onCreat()方法,创建表

//4.在自己的业务逻辑类里创建MySQLiteOpenHelper类并调用该类的getWritableDatabase()方法并返回SQLiteDatabase类的一个实例

第九章SqliteDatabase事务、列表显示多条数据

一.事物

1.事物的步骤:

获得SQLiteBase:SQLiteBase db=helper.getReadableDataBase();

开启事物:db.beginTransaction();

Try{

//执行数据库操作

//设置事务提交成功,sqlite数据库默认不自动提交,需要提交就要设置

db.setTransactionSuccessful();

}catch(Execption e){

e.printStackTrace();

}finally{

//结束事物

db.endTransaction();

}

二:游标适配器SimpleCursorAdapter

//SimpleCursorAdapter adapter=new simpleCursorAdapter(

上下文,布局文件,游标,游标中的属性名S tring[]{“属性名1”,“属性名2”},布局文件的属性名

int[]{布局文件中对应的id}

)

3.将adapter添加到ListView。。。中

四:xml文件中使用include

android:layout_width="match_parent"

android:layout_height="match_parent"

layout="@layout/incoding_top"/

五.游标适配器

1.安卓自带的游标适配器SimpleCursorAdpater使用步骤:

//1.创建SimpleCursorAdpater,并设置参数

// context上下文layout布局文件c游标from:列名的集合 to :组件名的集合

SimpleCursorAdapter sca=new SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to)

//2.设置要放到的组件上

lv.setAdapter(sca);

2.自定义游标适配器步骤:

//1.继承CursorAdapter类

//2.在MyCursorAdapter()方法里获得填充器context.getSystemService(https://www.doczj.com/doc/a94398620.html,YOUT_INFLATER_SERVICE);

//3.在 newView()方法里使用填充器

//4.在bindView()方法里将数据保存到组件上

3.include标签的使用:

android:id="@+id/ic"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

layout="@layout/sonlayout"

/>

效果:Activity加载main.xml文件,会自动加载sonlayout.xml布局文件

第十章ContentProvider、ContentResolver

1.ContentProvider内容提供者、ContentResovlver内容分解器的作用:

用于安卓应用之间的数据访问。

2.使用步骤:

//在安卓的清单文件AndroidManifest.xml、标签里插入如下代码:

android:authorities="包名"

>

//2.创建类MyContentProcider 继承ContentProvider类;

//3.定义全局变量

private UriMatcher um;//uri资源匹配器

//4.实例化全局变量在onCreat()方法里:

msl=new MySQLiteHelper(getContext());

sd=msl.getWritableDatabase();//获取数据库管理器

um=new UriMatcher(UriMatcher.NO_MATCH);

um.addURI("包名", "表名",标识);//在资源匹配器中添加一个标识

//5.根据你的需要实现这些query()、insert()、update()、delete()方法。以query()为例: public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

//匹配资源获取标识

int code=um.match(uri);

Cursor c=null;

//根据不同的标识执行不同的数据查询操作

switch (code) {

case 1:

//查表中所有数据的方法

c=sd.query("表名", null, null, null, null, null, null); break;

default:

break;

}

return c;

}

//6.使用其他应用使用ContentReslver调用该应用的数据库里数据的步骤:

//实例ContentReslver

ContentResolver cr= getContentResolver();

//调用query()方法

Cursor c=cr.query(Uri.parse("content://包名 /表名 "), null, null, null, null);

//7.使用数据

3.uri获取ID的方法:

matcher.addURI(authority, "person/#", PERSON_ID)

//content://authority/person/2

long id = ContentUris.parseId(uri);//可以解析uri,拿到里面的id 2

4. ContentObserver内容观察者作用:

用来监听数据库的数据是否发生变化。

5. ContentObserver内容观察者步骤:

//1.在被监听的应用中加入如下代码:

//提醒所有的观察者,数据已经发送改变,那么观察者那边就会系统回调onChange()方法getContext().getContentResolver().notifyChange(Uri, null);

//2.在观察者中新建一个类MyContentObserve继承ContentObserve类实现其onChang()方法publicclass MyContentObserver extends ContentObserver {

public MyContentObserver(Handler handler) {

super(handler);

}

publicvoid onChange(boolean selfChange) {

super.onChange(selfChange);

}

//3.在监听者中注册一个观察者:

ContentResolver cr=getContentResolver();

cr.registerContentObserver(Uri,false,new MyContentObserver(new Handler()));

//通过内容提供者获取联系人

思路:先查主表raw_contacts表中的_id,再循环遍历通过_id找的data表中相应的数据,再通过mintype找到相应的数据复制给对象

1.ContentResolver cr=getContentResolver();

2.通过查询源码找到联系人的URI:“content://”+ContactsContract.AUTHORIT+”表名”

3.查询:C ursor cursor=cr.query(“URI”,查询的列名数组,条件,条件值,排序);(查询的是主表(raw_contacts)的数据)

4.循环游标里的数据根据查询出来的数据(_id)查询data表中的数据

5.对data中根据_id查询出来的数据再一次循环,判断mintype的值并绑定数据到相应的对象属性中,再添加到集合中

//通过内容提供者写入联系人。并添加事物

Try{

1.ContentResolver cr=getContentResolver();

2.通过查询源码找到联系人的URI:“content://”+ContactsContract.AUTHORIT+”表名”

3.先插入数据到主表(raw_contacts),自动产生id

ArrayListoperations=new

ArrayList();

ContentProviderOperation op1= ContentProviderOperation.newInsert(uri)

.withValues(ContentValues)

.build();

operations.add(op1);

4.添加data表中的相应数据:

Uri uri2 = Uri.parse("content://"+ContactsContract.AUTHORITY+"/data");

ContentValues values=new ContentValues();

values.put("data1",info.getName() );

values.put("mimetype", "vnd.android.cursor.item/name");

ContentProviderOperation opt2 =

ContentProviderOperation.newInsert(uri2).withValueBackReference("raw_contact_id",0).withValues(v alues).build();

operations.add(opt2);

其他数据以此类推。。。。

5.Cr.applyBatch(ContactsContract.AUTHORITY,operations);//开启事物

}catch(Execption e){

e.printStackTrace();

}

什么示意图(Intent)?告诉别人要干嘛!专门用于android系统控制组件的!(Activity,service,broadcastreceiver)

比喻:意图就是一个跑腿的,并且附带送信(传值)

四大组件:Activity,ContentProvide,Service,BroadcastReceiver

1.Activity的跳转

1.1 显示意图跳转;

直接指定跳转到哪个Activity

1.2隐式意图跳转;

2.多个activity之间的跳转并传值

2.1 直接传值Extra();

2.2 bundle (本质是一个map)

2.3 传对象

2.3.1 实现Serializable

***2.3.2实现Parcelable

***3.隐式意图

什么是隐式意图?没有直接指定某一个Activity

找到某几个或者一个最合适它的Activity

跳转到某个SecondeActivity,ThreadActivity等等

3.1 IntentFilter 意图过滤器

(百合网:有很多网友注册了用户,填了资料(高富帅)----IntentFilter;你去找对象,按照你的条件搜索(高富帅)----Intent)

//application Context :getApplicationContext()

//1.1显示意图跳转;

Intent intent = new Intent();

//1.激活组件

intent.setClass(this, ActivityjumpActivity.class);

intent.setClassName(this, "com.jky.activityjump.ActivityjumpActivity");

intent.setClassName("com.jky.activityjump", "com.jky.activityjump.ActivityjumpActivity");

intent.setComponent(new ComponentName(this, ActivityjumpActivity.class));

//so easy

Intent intent1 = new Intent(this, ActivityjumpActivity.class);

2.多个activity之间的跳转并传值

//2.1 直接传值Extra();

intent.putExtra("name", "春哥");

intent.putExtra("sex", "假汉子");

//2.2 bundle (本质是一个map)

//Bundle打包

Bundle bundle = new Bundle();

bundle.putString("name", "曾哥");

bundle.putString("sex", "火星");

bundle.putInt("tel", 120);

intent.putExtra("data", bundle );

//2.3 传对象

// 2.3.1 实现Serializable

1、自定义一个类实现Serializable,为类中的属性写get/set方法即可

2.在Activity中:

Person person = new Person("犀利哥", "男", 119);

intent.putExtra("person", person);

// ***2.3.2实现Parcelable

1.自定义一个对象类,implementParcelable

2.写入get/set方法

3.实现Parcelable中的方法

//写入数据到pracel

public void writeToParcel(Parcel out, int flags) {

out.write类型(属性名);

}

public static final Parcelable.Creator CREATOR

= new Parcelable.Creator() {

public people createFromParcel(Parcel in) {

return new people(in);

}

public people[] newArray(int size) {

return new people[size];

}

};

private people(Parcel in) {

name = in.readString();//从parcel里面读取数据,注意:读取的顺序和类型要和传入是写的顺序要一致!

sex = in.readString();

tel = in.readInt();

}

4.在Activity中调用

people p = new people("胡可", "男", 114);

Android studio 开发安装教程

Android studio 安装教程 目录 Android studio 安装教程 (1) 1.JDK 的安装和Java 环境变量的设置 (2) 1.1 JDK 下载地址: (2) 1.2 安装JDK (2) 1.3、环境变量设置 (4) 2.Android studio 的安装 (7) 2.1 开始安装打开android studio 安装文件 (7) 2.2 缓存文件夹配置 (9) 2.3 打开Android studio (11)

1.JDK 的安装和Java 环境变量的设置 1.1 JDK 下载地址: https://www.doczj.com/doc/a94398620.html,/technetwork/java/javase/downloads/index.html JDK(Java Development Kit) 是整个Java 的核心,包括一系列Java 开发的东西,安装完毕需要配置一下环境变量。 1.2 安装JDK 安装JDK 本机是64 位,所以,选择jdk-7u21-windows-x64.exe 下载,下载完成后,进行安装

1.3、环境变量设置 1.3.1 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: 1.3. 2. JAVA_HOME JDK 的安装路径,这个环境变量本身不存在,需要创建,创建完则可以利用%JAVA_HOME% 作为统一引用路径,其值为:j d k在你电脑上的安装路径。 1.3.4 PATH PATH 属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值 为:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

Android开发者学习笔记——View、Canvas、bitmap

开发者学习笔记——View&Canvas BitMap、View以及Canvas是我们Ophone程序中常用到的类。本日以feisky的学习笔记呈现,通过实例讲解View&Canvas等等。 1. 从资源中获取位图 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。 当然,首先需要获取资源: Resources res=getResources(); 使用BitmapDrawable获取位图 使用BitmapDrawable (InputStream is)构造一个BitmapDrawable; 使用BitmapDrawable类的getBitmap()获取得到位图; // 读取InputStream并得到位图 InputStream is=res.openRawResource(R.drawable.pic180); BitmapDrawable bmpDraw=new BitmapDrawable(is); Bitmap bmp=bmpDraw.getBitmap(); 或者采用下面的方式: BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180); Bitmap bmp=bmpDraw.getBitmap(); 使用BitmapFactory获取位图 (Creates Bitmap objects from various sources, including files, streams, and byte-arrays.) 使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图。Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。 以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),和bmp(Android SDK Support Media Format)。

一看就懂的Android APP开发入门教程

工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣。于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出来分享给其他也想学习android开发的朋友,这么傻瓜的Android开发入门文章,有一点开发基础的应该都能看懂。 一、准备工作 主要以我自己的开发环境为例,下载安装JDK和Android SDK,假如你没有现成的IDE,你可以直接下载SDK完整包,里面包含了Eclipse,如果有IDE那么你可以滚动到下面选择U SE AN EXISTING IDE,然后安装SDK,如果你的SDK在安装时找不到JDK目录,你可以在系统环境变量里添加JAVA_HOME变量,路径为你的JDK目录,我的IDE是IntelliJ IDEA,都装好以后开始配置IDE增加SDK支持。 首先,打开Android SDK Manager把Android 4.0以上版本的未安装的都打勾装上,根据你个人实际情况,如果你只打算用自己的手机测试,那就把你机子系统一样版本的SDK包装上,下载时间有点长。

然后打开IDE创建新项目,IDEA比较智能,如果你装好了SDK,新建项目里就会出现Andro id的Application Module,选择后右边Project SDK为空,点击New按钮,找到SDK目录确定,下拉列表就会列出已经安装的各个版本的SDK,选择自己需要的版本,如果是第一次设置,IDE会提醒你先设置JDK,根据提示找到JDK目录即可。

新版Android开发教程+笔记七--基础UI编程1

封面

Android 基础UI编程1 更改与显示文字标签 TextView 标签的使用 ①导入TextV iew包 import android.widget.TextView; ②在mainActivity.java中声明一个TextView private TextView mTextView01; ③在main.xml中定义一个TextView ④利用findView ById()方法获取main.xml中的TextView mTextView01 = (TextView) findViewById(R.id.TextView01); ⑤设置TextV iew标签内容 String str_2 = "欢迎来到Android 的TextView 世界..."; mTextView01.setText(str_2); ⑥设置文本超级链接

android开发笔记

实现直接拒接来电 经过简单的google/baidu后,发现android没有现成的API去拒接电话。android可以通过注册BroadcastReceiver截取短信,因为这个broadcast是一个ordered broadcast,所以只要优先级比短信接收程序高,就可以提前终止掉这个broadcast receiver。 但是,电话呼入则没有类似的机制。不过,综合网上的一些资料,通过以下大体的步骤,则可以实现拒接电话: 1、注册broadcast receiver,监视手机状态: Java代码 1. 2. 3. 4. 5. 当手机接收到电话时,则会触发该broadcast receiver。 2、最重要的,就是取得可以控制电话的API。这些API貌似是android内部的接口,并未暴露。具体方式参见该帖子:https://www.doczj.com/doc/a94398620.html,/u/20091226 ... d-586a278875c0.html 使用时需要手动添加import: Java代码 1.import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.ITelephony; 同样的方式,在stackoverflow上也有人大致地提了下:https://www.doczj.com/doc/a94398620.html,/questio ...

Android开发入门教程

第一篇:安装SDK 这里主要介绍如何安装Android的SDK开发包和配置开发环境。如果你还没有下载SDK,点击下面的链接开始。 Download the Android SDK 系统和软件配置要求 要通过Android SDK中提供的代码和工具进行Android应用程序的开发,需要一个合适的用于开发的电脑和合适的开发环境,具体要求如下: 支持的开发环境 Eclipse Eclipse 3.2,3.3(Europa) Android开发工具插件(可选) 其他的开发环境或者IDE JDK5.0或者JDK6.0(仅有JRE是不够的) 安装SDK 下载好SDK包后,将zip文件解压缩至合适的地方。在下文中,我们默认你的SDK安装目录为$SDK_ROOT 你可以选择将$SDK_ROOT/tools加入到你的路径中 1.Linux下,打开文件~/.bash_profile或者~/.bashrc,找到设定PATH环境变量的一行,将$SDK_ROOT/t ools的完整路径加入其中。如果没有找到设定PATH变量的行,你可以自己添加一行: export PATH=${PATH}:<你的$SDK_ROOT/tools的完全路径> 2.Mac下,在你的home目录中找到文件.bash_profile,和Linux的一样处理。如果还没有在机器上设定这个文件,你可以创建一个.bash_profile文件。 3.Windows下,右键点击【我的电脑】,选择【属性】,在【高级】页中,点击【环境变量】按键,在弹出的对话框中双击“系统变量”中的变量“Path”,将$SDK/tools的完全路径加入其中。 通过将$SDK/tools加入系统路径,在运行adb和其它一些命令行工具时就不需要键入完全路径名了。需要注意到是,当你升级了SDK后,如果安装路径有变动的话,不要忘记了更新你的PATH变量的设置,将其指向变动后的路径。 安装Eclipse插件(ADT) 如果你选择Eclipse作为Android的开发环境,可以安装一个专门为Android定制的插件:Android Deve lopment Tools(ADT),ADT插件集成

android手机测试总结(笔记)

2012年3月21日 系统测试(非功能性测试) 1、适配性测试 a) 手机的型号 b) 网络通信情况(2G\3G\WIFI\飞行模式、NET\WAP、中国电信、移动、联通) c) Android的版本号(Android 4.0、Android 2.3、Android 2.2、Android 2.1)主要是2.2\2. 3.*\ 4.0 d) 屏幕的分辨率(1280×720、960×640、960×540、854×480、800×480、640×480、640×360、480×360、480×320、400×240、320×240、220×176、) 2、功能模块测试(功能性测试) a) 根据预先编写的测试用例测试 3、异常测试(手机交互性事件) a) *按键打断,如:电源键、home键、音量键、返回键等;插拔数据线 b) 其他程序后台相互切换

c) *网络切换(2G\3G\WIFI\飞行模式、NET\WAP、中国电信、移动、联通、) d) 待机后是否能恢复程序和网络 e) 短信、电话和闹铃 f) 安装、覆盖安装和卸载 g) 有无SIM卡、有无SD卡 4、编写帮助文档或使用说明 2012-6-28 用户体验测试 1、界面 ①文字错误、图片不显示或显示不正确、缺少输入项、按钮的大小和点击效果 ②布局、图片和配色设计问题,测试人员很难进入 ③提示信息,提示信息语言准确简洁,有指导性。在应该提示的位置放入提示信息,比如程序需要接入网络,在无网络的情况下应给予提示 ④提示信息,提示信息的方式有很多,大概有弹出式和非弹出式两种,根据实际情况来区分

⑤阅读性,手机因输入方式和屏幕大小限时,目前以阅读为主要(除聊天软件),做好阅读是关键。文字字体、大小、颜色和背景颜色可调整,夜间模式 ⑥简洁,看看any.do就知道什么是简洁了,如穿着白纱美女的油画一般 ⑦输入法,输入法不能挡住输入框;回车可以跳转到下一个输入框 2、稳定性 ①网络,需要访问网络的程序,在网络不稳定的情况下,应能正常运行,不应出现意外退出和错误;如程序无法在该环境下运行,应提示用户 ②网络切换,同上 ③网络信号弱,同上 ④进程切换,在多进程切换中,应正常运行,并保持切换前页面,不应出现意外退出和错误 3、性能 ①程序进行某些功能时,不应使手机出现卡、顿等情况,视实际情况而定 4、安装 ①路径,可选择手机、SD卡

android开发学习笔记

Android开发学习笔记 by---- 三爷一、新建项目 Application Name: 应用程序名,即该应用的名称,日后在安卓市场上将显示该App名称,与项目无关。 Project Name:项目中的工程名(项目中的App名),注意,在项目中将使用该名称,该工程将被存放在下面命名的包下,命名时要注意规范。 Package Name:包名,格式为“com.自定义的包名.工程名”,其中包名自定义,但包名后的工程名必须和上面的Project Name一至。 Build SDK:选择android SDK的版本,建议选择1.6版本兼容范围广一点 Minimum Required SDK:该程序兼容的最低SDK版本,这里选择的版本必须跟上面选择的Build SDK版本一致。 Activity Name:第一个Activity的名称,随意命名,它将是程序的入口 Layout Name:为第一个Activity布局的xml文件名称,随意命名,建议与其对应的activity 名称有一定的关联性。 Title:上面设置的Activity的标题(这个在程序里都可以改) 二、项目文件夹说明 com.PackageName.ProjectName:该项目的文件夹,里面存放我们编写的源文件 gen:由ADT自动生成,其中包含有一个R.java的文件是用于声明res文件夹下的资源的句柄,程序将通过该文件来引用项目中的资源,该文件不要随意改动,。 Android 1.6:这里面是android的SDK包,程序中所有引用android的类都是从这个包里引用;这里的1.6为新建项目时选择的sdk版本号,这里的版本号会根据你新建项目时选择的版本号不同而不同。 bin:这个目录存放编译生成的android安装文件 assets:存放项目的资源,比如视频、音频、图片等较大的资源,注意该目录下的资源不会被生成句柄,所以只能通过路径来引用。

安卓开发学习笔记

1.avd:android virtual device 2.5554:模拟器端口号 3.ddms 观察线程thread 堆栈heap 、file explorer、emulator control(模拟打电话发短信) 4.Extras文件夹拓展工具 5.Adb.exe: android debug bridge 安卓调试桥 6.Adb常用指令:(配置环境变量) 1)adb devices:列出所有连接设备 2)Reset adb:重启adb调试桥 3)Adb kill-server:杀死adb调试桥 4)Adb start-server:启动adb调试桥 5)Netstat -ano:查看端口号 ----------------------------------------------------------------------------------------- 7.Platforms是系统文件 8.Assets是资产目录存放在该文件夹下面这些文件会被打包到应用程序的apk 9.Bin 编译后的文件目录 10.Gen自动生成的其下的R.java的内容也是通过修改其他文件内容而自动生成 11.Android.jar基于此jar包的开发 12.Project.properties 代表编译的版本可以修改 13.Libs 支持jar 包会被添加到Android dependence(依赖)目

录下 14.Res 资源目录 15.Drawable存放应用程序图标会自动生成一个id 在R文件里 1)H high 高分辨率 2)M middle 中分辨率 3)L low 低分辨率 4)X extra large 特大分辨率 5)Xx 超大分辨率 16. R文件的作用:自动编译生成res文件中的ID 17.Android manifest:应用程序的清单文件 程序的配置信息启动的图标应用程序名称包名版本号 -------------------------------------------------------------------------------------- 18.Android下软件安装的过程: 1)拷贝xxx.apk到/data/app/xxx-1.apk 2)在data/data目录下创建一个文件夹文件夹名称是当前应 用程序的包名。 3)软件卸载的过程是相反的 19.system/app下安装的是系统自带的应用 20.Windows下注册表是通过数据库实现;Android下的注册表是用xml文件实现

Android移动应用开发基础教程(微课版)-教学大纲

《Android移动应用开发基础教程(微课版)》教学大纲 学时:62 代码: 适用专业: 制定: 审核: 批准: 一、课程的地位、性质和任务 Android移动应用开发基础是普通高等学校计算机科学与技术专业的一门重要的专业基础课。通过本课程的学习,使学生能够在已有的计算机基础知识基础上,对Android移动应用开发有一个系统的、全面的了解、为掌握移动应用开发打下良好的基础;在系统理解和掌握Android移动应用开发基本原理的基础上,了解和掌握移动应用开发的基本原理和方法,具有设计和开发Android移动应用APP的基本能力。 Android移动应用开发是一门实践性非常强的学科,它要求学生在理解和掌握Android移动应用开发语言语法的基础上,充分利用实验课程,在计算机上动手完成程序的编写和调试。 二、课程教学基本要求 1.课程教学以Android移动应用开发方法为主,在教学过程中让学生掌握Android移动应用开发的基本原理和方法。 2.要求在教学过程中合理安排理论课时和实验课时,让学生有充分的使用在计算机上练习理论课程中学到的Android移动应用开发技巧和方法。 三、课程的内容 第1章 Android开发起步 让学生了解Android平台特点、体系架构和版本,掌握如何搭建Android开发环境,熟悉如何创建Android项目和Android编程的日志工具 第2章 Android核心组件:活动 让学生了解Android核心组件之一的活动是什么、活动生命周期,掌握活动基本操作、在活动中使用Intent、在活动之间传递数据、活动的启动模式。 第3章 UI设计 让学生熟练掌握线性布局、相对布局、通用UI组件、消息通知和菜单。 第4章广播机制 让学生了解广播机制,并熟练掌握如何使用广播接收器。 第5章数据存储 让学生熟练掌握Android文件存储、共享存储和SQLite数据库存储。 第6章多媒体 让学生熟练掌握播放多媒体文件、记录声音、使用摄像头和相册。 第7章网络和数据解析

Android智能电视APP开发笔记(一)

Android智能电视APP开发笔记(一) 1缘起 以小米盒子为代表的OTT机顶盒、智能电视的快速普及,快速推动了Android技术在机顶盒、智能电视领域的普及。既然都是用的Android操作系统,那么从技术上来说应该是大同小异的,当然和手机APP的应用相比,电视端的APP开发应该有一些都有的特点需要关注,我相信这样的特点应该不会太多。 写这个笔记的缘起在于一个生活上的小小不便,因为儿子正在读小学,每天早上起来都需要听英语,学校发的磁带真的是不方便,老的磁带机相信很少有人用了,虽然也给他买了一个步步高的复读机,不过没用几天就被搁置了。于是我在网上搜了个APP,在手机上很好用,可以直接翻看课文,也可以朗读课文,翻到哪页就朗读哪页,如果不翻动,就自动往下读,做的还是相当人性化的,但是这样一个新的问题产生了,每天早上我的手机就被我儿子霸占了,接到音响上听英语了,我要看个朋友圈啊啥的,就不方便了。 刚好家中有个OTT机顶盒,可以安装APP,就想着把这个APP装到OTT机顶盒上,结果发现完全无法使用,界面不对了,遥控器也响应不了了,完全无法使用啊,结论就是手机APP和TV APP还是有些区别的,须要作些微调适配的。 咋整呢?重新给写一个TV APP吧,为了夺回我手机的控制权,好歹哥以前也是开发工程师啊。 2Win7虚拟机创建 2.1 VMware Workstation安装 直接把开发环境安装在自己电脑上感觉不是太好,一个影响系统运行速度,二是免不了要装了卸,卸了装,把电脑运行环境搞得乱七八糟。所以决定还是在虚拟机环境中玩。 虚拟机当然选行业老大VMware了,下载Vmware workstation进行安装。没想到这玩意都升级到11.1版本了,这个世界真的是变化快啊。 从官网下载后再安装:

第一行代码Android学习笔记完全版

第一行代码Android学习笔记 感谢《第一行代码》,感谢郭霖博主,拯救我于水火。之前看视频学习Android,自以为已经小成了。在网易工作的朋友问了我几个问题,我就懵逼了。然后,遇到了《第一行代码》,终于把我带进了Android的世界。好书,真的会醉人啊。 这是学习第二遍时的部分笔记,以备后用。 这是第二版,比第一版增加了一些常用的方法。 hujunjob 于北航 2015.04.02

目录 第一章Android系统 (6) 1.1 安卓系统架构 (6) 1.2 Android 项目中的资源 (6) 第二章Activity (6) 一、创建Activity步骤: (6) 二、采用Intent切换activity (7) 1、显式Intent (7) 2、隐式Intent (7) 3、隐式Intent的其他用法 (8) 三、Intent传递数据 (8) 1、向下一个activity传递数据 (8) 2、返回数据给上一个activity (8) 四、activity的生命周期 (9) 1、活动状态 (9) 2、activity生存期 (9) 3、activity被回收数据保存 (11) 五、activity的启动模式 (11) 六、activity最佳实践 (11) 1、知道当前页面是哪一个activity (11) 2、随时随地退出程序 (11) 3、给每个activity都添加一个合适的启动方法 (13) 第三章UI (13) 一、常用控件 (13) 1、TextView (13) 2、Button (13) 3、EditText (13) 4、ImageView (14) 5、ProgressBar (14) 6、AlertDialog (14) 7、ProgressDialog (15) 二、基本布局 (15) 1、LinearLayout (15) 2、RelativeLayout (15) 3、FrameLayout (15) 4、TableLayout (15) 5、GridLayout (16) 三、自定义控件 (16) 1、添加自定义标题布局(无操作的) (16) 2、创建自定义控件 (16) 四、ListView (17) 1、最简单的Adapter (17) 2、定制ListView界面 (18)

Android官方开发教程中文版(二)

Android官方开发教程中文版 添加操作栏 添加操作栏 操作栏是你能为你的Activity实现的重要的设计元素之一,它提供了几种用户界面特性,使你的应用能够保持和其它应用的一致性,以便用户很快熟悉它。主要功能包括:1.用专门的空间为你的应用指定标识并且指示出用户在应用中的位置。 2.以可预测的方式访问重要的操作(如搜索) 3.支持导航和视图切换(使用选项卡或下拉列表) 本课程提供了关于操作栏基础知识的快速指南,要获得关于操作栏各种特性的更多信息,请参考“操作栏”指南。 设置操作栏 操作栏的最基本形式是为Activity显示标题以及在标题左边显示应用图标。即使是这种简单的形式,操作栏也有利于通知用户当前的位置,以及为你的应用保持一致性。 操作栏包括一个应用图标和Activity标题 设置一个基本的操作栏需要你的应用使用一个Activity主题并启用操作栏。如何获取这样一个主题取决于你的应用支持的最低Android版本。因此这节课根据你的应用支持的Android最低版本分为两个部分。 仅支持Android3.0及以上版本 从Android3.0开始(API级别11),操作栏被包含在所有使用Theme.Holo(或它的派生类)主题的Activity中,当targetSdkVersion或minSdkVersion的值大于等于11时,Theme.Holo 是默认主题。 因此,要在Activity中添加操作栏,只需简单地把这两个属性之一的值设为11或更高就可以了,如:

android学习笔记

1,android手势开发识别Gestrue开发 (https://www.doczj.com/doc/a94398620.html,/tsdl2009/archive/2010/08/13/5810922.aspx) 经过了一段Android的学习,基本上了解了Android的基础知识。今天,我们来研究一下Android中特有的手势识别技术,即Gesture。首先,我从网上找了很多资料,具体归纳起来有2类:一类是触摸屏手势识别,另一类是输入法手势识别。 我们先来讨论一下第一类触摸屏手势识别,这个比较简单,就是利用触摸屏的Fling、Scroll等Gesture(手势)来操作屏幕,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。在Android系统中,手势的识别是通过GestureDetector.OnGestureListener接口来实现的。下面通过我自己的一个动手实验来进行介绍。 首先,我们在Eclipse中创建一个工程,名称叫SignFilpDemo。然后,在src 中创建一个SignFilpDemo源文件。这个工程是基于Android1.6的。因为,在Android 1.6之前的版本中,需要开发者编写大量的代码才能实现某些更为复杂的Gestures功能。而在之后的版本SDk中嵌入标准的Gestures API库(Package: android.gesture),包括了所有与Gesture技术相关的操作:存储、加载、创建新Gestures和识别等。其工程结构如下: 图1 接着,我们知道Android的事件处理机制是基于Listener(监听器)来实现的,比如我们今天所说的触摸屏相关的事件,就是通过onTouchListener。因此,我们在源代码中要实现这个接口。另外,我们还要实现OnGestureListener接口,因为,那个手势的识别是通过GestureDetector.OnGestureListener接口来实现的。其中,onTouchEvent方法则是实现了OnTouchListener中的抽象方法,我们只要在这里添加逻辑代码即可在用户触摸屏幕时做出响应。在这里我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector 来分析是否有合适的callback函数来处理用户的手势。接下来,就是实现了以下6个抽象方法,其中最有用的当然是onFling()、onScroll()和onLongPress()了。下面介绍一下: (1)用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发,其源代码如下: public boolean onDown(MotionEvent e) { return false;

Android APP开发入门教程

Android APP开发入门教程 这篇文章主要介绍了Android APP开发入门教程,从SDK下载、开发环境搭建、代码编写、APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下。 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣。于是凌晨一点睡不着写了第一个android 程序HelloAndroid,po出来分享给其他也想学习android开发的朋友,这么傻瓜的Android 开发入门文章,有一点开发基础的应该都能看懂。 一、准备工作 主要以我自己的开发环境为例,下载安装JDK和Android SDK,假如你没有现成的IDE,你可以直接下载SDK完整包,里面包含了Eclipse,如果有IDE那么你可以滚动到下面选择USE AN EXISTING IDE,然后安装SDK,如果你的SDK在安装时找不到JDK目录,你可以在系统环境变量里添加JAVA_HOME变量,路径为你的JDK目录,我的IDE是IntelliJ IDEA,都装好以后开始配置IDE增加SDK支持。 首先,打开Android SDK Manager把Android 4.0以上版本的未安装的都打勾装上,根据你个人实际情况,如果你只打算用自己的手机测试,那就把你机子系统一样版本的SDK 包装上,下载时间有点长。

然后打开IDE创建新项目,IDEA比较智能,如果你装好了SDK,新建项目里就会出现Android的Application Module,选择后右边Project SDK为空,点击New按钮,找到SDK 目录确定,下拉列表就会列出已经安装的各个版本的SDK,选择自己需要的版本,如果是第一次设置,IDE会提醒你先设置JDK,根据提示找到JDK目录即可。

Android Alarm学习笔记

设置一个Alarm需要更新一下数据。 1. update alarms.db 2. update com.android.alarmclock_preferences.xml 3. update Settings.System.NEXT_ALARM_FORMATTED for status bar 4. set Kernel RTC alarm or send a message if no driver 具体的函数调用如下所示: com.android.alarmclock.AlarmClock.onCreate() -> SetAlarm.onPreferenceTreeClick() -> SetAlarm.saveAlarm() -> Alarm.setAlarm() -> Alarm.setNextAlert() -> Alarm.enableAlert(ALARM_ALERT_ACTION)/saveNextAlarm(Settings.System.NEXT _ALARM_FORMATTED) -> android.app.AlarmManager.set() -> AlarmManagerService.set() -> AlarmManagerService.setRepeating -> AlarmManagerService.setLocked() -> android.app.IAlarmManager.set() -> RTC.save()// /dev/alarms Alarm闹铃的函数调用如下所示: RTC (WAKEUP) -> AlarmReceiver.onReceive(ALARM_ALERT_ACTION) -> AlarmAlert.onCreate() -> AlarmAlertWakeLock.acquire()/KeyguardManager.newKeyguardLock().disableKeyg uard() -> AlarmKlaxon.postPlay() -> AlarmKlaxon.KillerCallback().onKilled() -> AlarmAlert.dismiss() -> AlarmAlertWakeLock.release()/KeyguardManager.newKeyguardLock().reenableKey guard() DeskClock App中的code block说明如下: Alarm是描述闹钟的抽象类。 AlarmAlert处理闹铃过程中系统相关的事件,继承AlarmAlertFullScreen。AlarmAlertFullScreen显示闹铃界面,并处理闹钟界面上到控件消息。AlarmAlertWakeLock提供控制wakelock接口。 AlarmClock闹钟界面,包括闹钟列表、数字时钟、option菜单。 AlarmKlaxon是一个服务,提供闹铃和震动功能,如果一个闹铃fire,前面一个闹铃已经在闹来,则取消前面那个,闹后来者。 AlarmPreference闹铃文件。 ContentProvider维护闹钟表,字段包括_id、hour、minutes、daysofweek、alarmtime、enabled、vibrate、message、alert。 Alarms提供了操作闹钟的接口,相当于AlarmManager。enableAlert()设置一个闹钟,用的是PendingIntent到方式计算时间。RTC的设置在enableAlert()的am.set(AlarmManager.RTC_WAKEUP, atTimeInMillis, sender); RTC_WAKEUP表示该Alarm如果在关机的情况下来到,则会自动开机闹铃。 DeskClock桌面时钟到activity。其中包括了系统时间、日期、电池及天气等信息,其中天气信息是判断是否存在提供天气信息的app后,从数据库中读取当前的天气信息来更新。也就

Android学习笔记

Android学习笔记(by quqi99 MSN: quqi99@https://www.doczj.com/doc/a94398620.html,)Android platform是一个用于开发移动程序的软件包,它包括了操作系统、中间件及一些关键应用。开发者能使用android SDK为Android platform开发应用,这些应用使用JA V A 语言书写,运行在虚拟机Dalvik(一个专为手机程序开发的基于linux内核的JA V A虚拟机)。 https://www.doczj.com/doc/a94398620.html,/wiki/index.php?title=%E7%BF%BB%E8%AF%91%E4%BB%BB %E5%8A%A1%E9%A2%86%E5%8F%96&printable=yes https://www.doczj.com/doc/a94398620.html,/forumdisplay.php?fid=2 1 什么是Android 1.1 Android的特性 ?应用框架,让一些基础设施得以重用 ?Dalvik虚拟机,专为开发移动程序优化 ?集成的浏览器,(基于WebKit引擎) ?优化的图形库,(2D图形库以及基于OpenGL ES 1.0规范的3D图形库) ?SQLite,用于结构化数据的存储,是一个数据库 ?多媒体支持,支持多种音频,视频格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) ?GSM技术(依赖具体硬件) ?Bluetooth, EDGE, 3G, WiFi(依赖具体硬件) ?Camera, GPS, compass, accelerometer(依赖具体硬件) ?丰富的开发环境(DEBUG工具,内存及性能工具,Eclipse的插件等) 1.2 Android的架构 Android操作系统的模块如下:

最新最全android开发视频教程

最新最全android开发视频教程 这是本站收集整理的android方面的开发视频教程,仅供大家下载,学习; ★视频目录★ 第一部分:百度云网盘存储 第01套尚学堂_高明鑫_全网最新、最牛、最全andriod视频教程 第02套Android之手机安全卫士开发教程+源码 第03套Android之自定义View(李科霈)开发教程+源码 第04套开发Android多媒体软件系列视频 第05套Android阿福多媒体播放器开发教程+源码 第06套Android系统的手机防盗软件的实现 第07套Android的软件管理器的开发教程 第08套Android地图搜索应用——美食天下 第09套大话优酷、酷六类视频网站Android客户端软件开发 第10套88个经典Android应用程序打包下载 第11套3G手机Android应用新浪微博项目开发教程 第12套UML和红孩子客户端独立项目开发讲解+源码 第13套安卓之微信项目开发实战教程+源码 第14套安卓之好友互动项目开发实战教程+源码 第15套Android之新浪微盾(殷凯)的开发教程+源码+资料 第16套传智播客Android之病毒与反病毒开发教程+源码 第17套Android社交分享平台——口袋微博 第18套北风网Android之新浪微博项目开发教程(沈大海)+资料+源码第19套北风网Android应用实战淘宝网手机客户端全程实录+源码 第20套Android系统的手机防盗软件的实现+源码 第21套基于Android的软件管理器开发教学视频 第22套开发Android移动互联网应用视频

第23套疯狂Java李韩飞老师Android项目新浪微博实战教程+PPT 第24套Android之豆瓣项目开发教程+源码 第25套Mars老师Android开发教学视频 第26套Android开发入门视频教程高清版 第27套《Android开发视频教程》全四季 第28套【张泽华】android视频教程 第29套Android开发视频教程 第30套Android开发基础视频教程 第31套手机安全卫士项目开发视频 第32套Android开发视频教程第三季 第33套Android开发视频教学视频教程第二季mars老师制作 第34套3G手机Android应用开发 第35套Android开发从零开始 第36套新浪微博Android OAuth2.0授权视频教程 第37套Sundy‘s Android高级应用开发课程共享版 第38套基于Android的通讯录开发教学视频 第39套腾讯微博Android客户端开发 第40套Android2.3源码下载 第41套8天快速掌握Android视频 第42套Google Android开发入门与实战视频 第43套老罗Android视频教程详解篇 第44套轻松几步学Android开发视频教程 第45套Android应用开发之高级应用 第46套Android学习资料大全 第47套Android深入浅出之基础篇 第48套android高级应用课程共享 第49套Android深入浅出 第50套老罗Android开发视频教程-安卓巴士 第51套黑马程序员_黎活明_Android核心基础视频教程 第52套新浪微博Android开发视频教程

android笔记

Android四大基本组件分别是: 1、活动(Activity); 2、服务(Service); 3、内容提供者(Content Provider); 4、广播接收器(BroadcastReceiver)。 Activity 答:应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。一般所指的活动是用户界面。一个应用程序可能有一个或者以上的活动存在,每个活动也都会有自己的View。 Service 答:一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。服务是在背景长时间运行的应用组件,不和用户直接进行互动。 BroadcastReceiver 答:广播接收器 Android四大组件的详细讲解 Android应用程序由一些零散的有联系的组件组;Activities(活动)应用程序的显示层;Services(服务)Android应用程序中;Content(内容)提供共享的数据存储;Intents(意图)简单的消息传递框架;BroadcastReceivers(广播接收器;Notifications(通知)用户通知的框架;一、Activity详解Act Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest 绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石: Activities(活动)应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。你在这章中将会学习到更多关于Activities。

相关主题
文本预览
相关文档 最新文档