Allove Team 致力于移动应用的开发和服务(Android,J2ME,iphone,ophone)

A Part Of Android OS

[来自我毕业论文的一部分,实际上是来自Google搜索结果的一部分,囧]

4.1 Android体系结构研究

从下至上android操作系统分成四个层次结构:

第一层:Linux操作系统及驱动程序

第二层:本地代码框架(C/C++)

第三层:Java框架(Framework)

第四层:Java应用程序

Android的第一层由c语言实现,是由linux标准内核和android私有内容构成的。第二层的实现中既有c又有c++的成分,这一层中的本地代码来自linux开源社区和第三方提供者以及各大设备厂商。

4.2 Android的Linux内核和驱动程序

Android使用的是标准的linux2.6的内核作为其操作系统。随着android发布的版本的升级,android使用的linux内核也随之进行了升级。各发布版本的内核使用情况如下:

Android 1.0 - Linux 2.6.25

Android 1.4 - Linux 2.6.27

Android 1.5 - Linux 2.6.29

Linux Kernel在Android源代码中的目录为kernel。Android的内核结构和标准的linux内核结构基本相同,主要增加了一些驱动程序。这些驱动程序又分为android专用驱动和android设备驱动。

Android专用驱动程序:

Android中有一些驱动程序提供辅助操作系统的功能,这些驱动程序不是linux系统的标准驱动,他们一般不操作实际的硬件设备,只是辅助操作系统运行。主要的android专用驱动程序如下所示:

Ashmen:匿名共享内存驱动。其含义是匿名共享内存(Anonymous Shared Memory),通过这种内核的机制,可以为用户空间的程序提供内存分配机制。Ashmen设备节点名称为/dev/ashmen,主设备号为10(Misc Driver),次设备号动态生成。Ashmen驱动程序在内核中的头文件和代码路径如下:

Kernel/include/linux/ashmen.h

Kernel/mm/ashmen.c

在用户空间C linutil对Ashmen进行封装并提供接口。

 

Binder:Android的binder驱动程序为用户提供IPC(进程间通信)机制的支持,android整个系统的运行都依赖于binder驱动。Binder驱动的设备节点名称为/dev/binder。主设备号为10(Misc Driver),次设备号动态生成。Binder驱动程序在内核中的头文件和代码路径如下:

Kernel/include/binder.h

Kernel/drivers/misc/binder.c

在用户空间libutil公交卡和Service Manager守护进程中调用Binder接口提供对整个系统的支持。

 

Logger:Android的Logger驱动程序为用户提供log支持,这个驱动做为一个工具来使用,在用户空间中Logger有三个设备节点:

/dev/log/main,

/dev/log/event,

/dev/log/radio

主设备号为10(Misc Driver),次设备号动态生成。Logger在内核中的头文件和源码的位置如下所示:

Kernel/include/logger.h

Kernel/drivers/misc/logger.c

在android用户空间中logcat程序调用Logger驱动程序来为用户输入log信息。

4.3 Android底层库和相关程序

4.4 Android的Java虚拟机和Java环境

4.5 Android的GUI系统

[EasyBlog]alpba1.0.0版内测报告

今天收到eric的内测邀请函,得到了一个叫做easyblog的apk,装在我的G1上跑了一遍,跑的很流畅(WIFI环境),对wp博客的支持还不错(当然你需要在自己的wp后台开启xml-rpc协议,XML-RPC协议默认是未开启的,需要到WordPress管理后台的“设置–>撰写”里的“远程发布”给XML-RPC打上勾),对博客的CURD功能支持的很完善,再来聊聊我的测试意见吧

如果你先要这个app的话,可以联系eric,猛击这里

1.整个app的UI以黑白配为主调,给人一种系统级预装应用的的感觉,点击博客显示的是一个listview,显示的博客的文章列表,单击上部的button可以查看自己的保存的草稿视图,两个视图的切换比较流畅,日期图标的设计让人眼前一亮,很是赏心悦目
主界面
2.单击添加文章进入文章编辑页面,页面UI也是可圈可点,估计UI设计人员是费了一番心思的。
blog文章
3.文章编辑功能和wptogo差别不大,插入图片是可以从文件中读取或者即时调用相机拍照,页面编辑中还有个涂鸦按钮,点进去后发现这个绝对是一个亮点,写博客时候可以不再用字符去拼图,而是充分利用G1电容屏的优势展现自己的想法和创意,想到这里我有些“湿了” 咳咳 淡定… …

继续阅读 »

contacts2操作通讯录方法(一)

android2.x使用的通讯录数据库数据做了很多物理结构上的改动,经过翻墙查看官方文档之后受益良多,今天小议以下向通讯录插入联系人的方法
首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见,例如下面的代码

  1. ContentValues values = new ContentValues();       
  2.          Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
  3.          long rawContactId = ContentUris.parseId(rawContactUri);
  4.  
  5.          values.clear();
  6.          values.put(Data.RAW_CONTACT_ID, rawContactId);
  7.          values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
  8.          values.put(StructuredName.GIVEN_NAME, "Sullivan");
  9.          values.put(StructuredName.FAMILY_NAME, "Mike");
  10.          getContentResolver().insert(Data.CONTENT_URI, values);
  11.         
  12.          values.clear();
  13.          values.put(Data.RAW_CONTACT_ID, rawContactId);
  14.          values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  15.          values.put(Phone.NUMBER, "13989297343");
  16.          values.put(Phone.TYPE,Phone.TYPE_HOME);
  17.          getContentResolver().insert(Data.CONTENT_URI, values);

按照这种传统的方法插入时每次只能插入元数据,就是某一种类型的一个值

  1. /**
  2.      * 传统插入方法 每次只能插入元数据,就是某一种类型的一个值
  3.      * 插入之后ContentValues需要被清空才能执行下一次插入数据操作
  4.      */
  5.     public void insert_traditional() {
  6.         ContentValues values = new ContentValues();
  7.         Uri rawContactUri = getContentResolver().insert(
  8.                 RawContacts.CONTENT_URI, values);
  9.         long rawContactId = ContentUris.parseId(rawContactUri);
  10.  
  11.         values.clear();
  12.         values.put(Data.RAW_CONTACT_ID, rawContactId);
  13.         values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
  14.         values.put(StructuredName.GIVEN_NAME, "Sullivan");
  15.         values.put(StructuredName.FAMILY_NAME, "Mike");
  16.         getContentResolver().insert(Data.CONTENT_URI, values);
  17.  
  18.         values.clear();
  19.         values.put(Data.RAW_CONTACT_ID, rawContactId);
  20.         values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  21.         values.put(Phone.NUMBER, "13989297343");
  22.         values.put(Phone.TYPE, Phone.TYPE_HOME);
  23.         getContentResolver().insert(Data.CONTENT_URI, values);
  24.  
  25.     }

android官方同时介绍了另外一种新的批量插入的方法

下载: batch.java
  1. /**
  2.      * 批量插入通讯数据 相对传统方法 更适合通讯录的导入操作
  3.      * RawContacts.CONTENT_URI中 插入这个值
  4.      * 是为了触发contacts表的某个函数 可以初始化和插入数据 使之能够在通讯看到
  5.      * 插入StructuredName.DISPLAY_NAME 时格式为family name和given name中间 以空格隔开
  6.      * 就不需要再插入family_name和given_name
  7.      * 此方法相对传统方法来说在大量插入数据库比较节省时间
  8.      * 批量插入方法需要一个库来支持Lists对象
  9.      * 项目地址为http://code.google.com/p/google-collections/downloads/list
  10.      * 我使用的是google-collect-1.0.jar
  11.      */   
  12.     public void insert_batch() {
  13.         try {
  14.             ArrayList<contentprovideroperation> ops = Lists.newArrayList();
  15.             int rawContactInsertIndex = ops.size();
  16.             ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
  17.                     .withValue(RawContacts.DIRTY, "1")
  18.                     .build());
  19.  
  20.             ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
  21.                     .withValueBackReference(Data.RAW_CONTACT_ID,
  22.                             rawContactInsertIndex).withValue(Data.MIMETYPE,
  23.                             StructuredName.CONTENT_ITEM_TYPE).withValue(
  24.                             StructuredName.DISPLAY_NAME, "朱Sullivan")
  25.                     .build());
  26.            
  27.             ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
  28.                     .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
  29.                     .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
  30.                     .withValue(Phone.NUMBER, "13989297343")
  31.                     .withValue(Phone.TYPE, Phone.TYPE_HOME).build());
  32.             getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
  33.         } catch (RemoteException e) {
  34.             // TODO Auto-generated catch block
  35.             e.printStackTrace();
  36.         } catch (OperationApplicationException e) {
  37.             // TODO Auto-generated catch block
  38.             e.printStackTrace();
  39.         }
  40.     }
  41. </contentprovideroperation>

但是批处理方法有个不足之处就是,目前不支持MIMETYPE里面的NOTE,WEBSITE和NICKNAME的批量插入,这几个还需要用传统方法去操作

2010年03月14日作者:izxm11[开发及软件]Android

0 Comments

android 传感器

传感器类型分为:方向,加速度,光线。磁场,临近性,温度
准确性分为高,中,低,不可靠四种。不知道不可靠这种准确性是用来做什么的
还有采样率貌似是不确定的,依靠设备的本身的特性

作为与外界交互的一个窗口, 与传感器相关的接口,可以开发出很多有特色的,有趣的app出来。

2010年01月30日作者:秦 涛[开发及软件]Android

0 Comments

Linkify对象的使用——对输入String做出判断

范例介绍如何让系统自动判断输入的字符串该做的提示,如输入的电话号码,就提供电话连接;若输入的是网址,就提供Hyper Link连接。该范例的功能非常的简单,就是在TextView Widget显示连接,让手机用户点击之后,打开对应的事件程序。

在Android里面,只要使用很简单的Linkfy对象,就能够完整这个程序,Linkify对象可以让系统动态的获取,并迅速做出判断。也就是说,如果你输入的是电话号码,点下连接,马上会到拨打电话的程序,如果你输入的是Email,就回到Email的页面;如果是输入网址,那么就会自动的打开浏览器。

具体程序如下:

package com.allove;

import android.app.Activity;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class Test extends Activity {
private EditText mEditText;
private TextView mTextView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

this.Init();
mEditText.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mEditText.setText(“”);
}
});
mEditText.setOnKeyListener(new EditText.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
mTextView.setText(mEditText.getText().toString());
Linkify.addLinks(mTextView, Linkify.PHONE_NUMBERS|
Linkify.WEB_URLS|
Linkify.EMAIL_ADDRESSES);
return false;
}
});
}

public void Init(){
mEditText=(EditText)this.findViewById(R.id.EditText01);
mTextView=(TextView)this.findViewById(R.id.TextView01);
}
}

善听—android/OMS音乐播放器—–圣诞特别测试版

圣诞节快到了,是在等圣诞老人神秘礼物?还是等待享受节日狂欢的那种祥和氛围呢?如这样,来点音乐岂不美哉妙哉?音箱设备总不可能随身带吧?带了手机就可以啦!善听是Allove专为圣诞推出的一款在线音乐搜索播放软件,作为Android平台上我们推出的第一款音乐类软件,我们力求完美,打造精品,带给您别样的音乐体验!

《善听》公测圣诞特别版功能简介:
1.在线音乐搜索——随时随地搜索自己喜欢的歌曲,再也不用电脑上网去搜索啦!

2.音乐排行榜——在线自动更新排行榜,轻松掌握最新流行趋势,作个时尚音乐达人。

3.本地歌曲播放——想播放手机里面的音乐再也不用到处找文件啦!打开善听就行了!

4.自定义播放列表——把自己喜欢的音乐分个类,想听什么类型的就选择什么类型的列表。

5.歌词同步显示——歌词同步显示不再是MP3和电脑的专利啦,Android手机也可以的!

6.自定义手机铃声——不用在纠结于Android手机不能换铃声的苦恼啦,善听帮你搞定。(本版本暂时不支持)

下载地址:download

注意:本版本属于测试版 请留意我们的更新和修正  http://blog.allove.org

http://blog.allove.org/archives/shanting.html

意见反馈 :请留下您的宝贵意见

登陆界面

登陆界面

登陆界面
注册界面---注册成为善听会员-享受Allove所有服务

注册界面---注册成为善听会员-享受Allove所有服务

善听播放器--主界面

善听播放器--主界面--本地歌曲

最热门的歌曲

最热门的歌曲

播放界面

播放界面

网络歌搜索

网络歌搜索

网络歌搜索
网络歌搜索结果

网络歌搜索结果

android widget小工具

小工具 widget

Advanced Android Dev

Android is what ?

Platform Features
Application framework enabling reuse and replacement of components
Dalvik virtual machine optimized for mobile devices
Integrated browser based on the open source WebKit engine
Optimized graphics powered by a custom 2D graphics library; 3D graphics
based on the OpenGL ES 1.0 specification (hardware acceleration optional)
SQLite for structured data storage
Media support for common audio, video, and still image formats (MPEG4, H.264,
MP3, AAC, AMR, JPG, PNG, GIF)
GSM Telephony (hardware dependent)
Bluetooth, EDGE, 3G, and WiFi (hardware dependent)
Camera, GPS, compass, and accelerometer (hardware dependent)
Rich development environment including a device emulator, tools for debugging,
memory and performance profiling, and a plugin for the Eclipse IDE

Use android to dev the mobile web-based app
Very easy for you to develop the web-based App l,you can get the more info from the SDK doc
12

数字记忆大挑战DigitalFun(Android/Ophone)

数字记忆大调整是alloveteam最近开发的一款益智类小游戏。其中设置了两种模式:普通模式和高手模式,普通模式中您可以看到逐个点亮的数 字,但是在高手模式中你就只能看到一个个亮起的小灯了。高手模式中的数字顺序和普通模式一样都是从左到右从上到下依次为 1.2.3.4.5.6.7.8.9。

一。普通模式可以看到数字

玩法如下:

继续阅读 »

Android 商务通(HiTravel) for 中国移动Ophone

weatherflig日前Allove Team 发布了 商务通(HiTravel)的android1.5以上版本,由于中移动的ophone目前使用的是android 1.0版本,所以需要做一些移植工作,现在移植工作已经基本完成,正在做最后的质量保证工作,敬请关注。 放出一些ophone上的截图,仅供预览。

1. 实时天气及预报界面,也许使用过商务通的朋友还不知实际上我们软件显示的天气信息中 与城市名一起显示的图标和描述 是实时天气,而不是整天的概况,当然这个数据也许会有一定的误差。

2.机票查询界面,与其他查询界面一样都是出自Allove Team的优秀美工之手,希望大家喜欢。

3.列车途经站点

4.酒店搜索结果列表

5.酒店预订表单的一部分

6.公交查询信息 。

继续阅读 »

返回顶部