如何打开Anroid系统自带邮件应用

在网上很容易找到如何调用系统自带的邮件系统发送邮件,但是关于如何打开邮件应用的主界面的文章很少。 android系统一般都会带系统自带的Email应用,包括一些定制机。android自带的Email应用的包名是com.android.email,这个可以从应用管理器中查找到。只有一个包名信息打开应用不太可能。android系统允许通过组件名(ComponentName)打开一个应用。组件是包含应用包名和主Activity的对象。如何找到Email的主Activity呢?通过执行如下代码可以列如系统中所有应用的主Activity类和主包名。 private String listPackage() { List mApplications = null; PackageManager manager = getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); // 取出Intent mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 分辨出位默认Laucher启动的程序 final List apps = manager.queryIntentActivities(mainIntent, 0); // 利用包管理器将起取出来 Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); StringBuffer sb = new StringBuffer(); if (apps != null) { final int count = apps.size(); if (mApplications == null) { mApplications = new ArrayList(count); } mApplications.clear(); for (int i = 0; i < count; i++) { ResolveInfo info = apps.get(i); sb.append(“Label:”).append(info.loadLabel(manager)).append(“;\n\r”); sb.append(“packageName:”).append(info.activityInfo.applicationInfo.packageName).append(“;\n\r”); sb.append(“name:”).append(info.activityInfo.name).append(“;\n\r”); sb.append(“icon:”).append(info.activityInfo.loadIcon(manager)).append(“\n\r\n\r”); } } return sb.toString(); } 通过查找发现Email的主Activity的类名是com.android.email.activity.Welcome。这样打开邮件主界面就很易容了。 ApplicationInfo application = new ApplicationInfo(); application.name = “电邮”; application.className = “com.android.email.activity.Welcome”; application.packageName = “com.android.email”; ComponentName c = new ComponentName(“com.android.email”,”com.android.email.activity.Welcome”); Intent intent = new Intent(); intent.setComponent(c); startActivity(intent);

android 问题

1、ANR是什么,产生原因,如何避免其发生。 2、Android Force Close 产生原因及解决方法 3、Activity、Intent、Intent Filter、Service、Broatcast、BroatcastReceiver 4、IntentService的优点

用DisplayMetrics判断屏幕密度

如果用下述代码判断屏幕密度,只能识别出密度为240,160,120的屏幕,其它的将无法识别; DisplayMetrics dm = new DisplayMetrics(); switch (dm.densityDpi) { case DisplayMetrics.DENSITY_HIGH: break; case DisplayMetrics.DENSITY_MEDIUM: break; case DisplayMetrics.DENSITY_LOW: break; default : } 因为android终端种类很多,比如魅族M9的为320 所以在识别时最好加对上不是上述三种类型手机的处理: DisplayMetrics dm = new DisplayMetrics(); switch (dm.densityDpi) { case DisplayMetrics.DENSITY_HIGH: break; case DisplayMetrics.DENSITY_MEDIUM: break; case DisplayMetrics.DENSITY_LOW: break; default : if(dm.densityDpi>DisplayMetrics.DENSITY_HIGH){ } else if(dm.densityDpi < DisplayMetrics.DENSITY_LOW){ } else { } }

如何使32位与64位的eclipse同时运行

首先,要安装两个java虚拟机32位的和64位的,分别供两个eclipse使用; 其次,分别在两个eclipse的配置文件eclipse.ini中指定各自使用的虚拟机,具体是在配置文件中增加如下:(注意:参数名称-vm与虚拟机路径在两行) -vm C:Program Files (x86)Javajre6bin 这样,两个eclipse能同时使用了。 另外说明一下eclipse寻找jre的优先顺序是: 1、eclipse.ini中的-vm参数所指定的虚拟机; 2、eclipse同目录下的jre; 3、系统环境变量中指定的jre;

android: 不需要焦点的 TextView跑马灯 MarqueeTextView

public class MarqueeTextView extends TextView { public MarqueeTextView(Context appCon) { super(appCon); } public MarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean isFocused() { return true; } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { } }

android文字阴影效果

最近用到文字的阴影效果,特将研究结果写 篇文章。 关于android文字阴影,共有四个属性可以 设置: android:shadowColor :阴影颜色 android:shadowDx :阴影x方向位移 android:shadowDy :阴影y方向位移 android:shadowRadius :阴影的半径 注意:阴影的半径必须设,为0时没有效 果。 下面为改变x位移: android:shadowColor=”#ff000000” 两位为透明度) android:shadowDx=”2” android:shadowDy=”0” android:shadowRadius=”1” 效果(向右为正) 下面为改变y位移: android:textColor=”#979790” android:shadowColor=”#ff000000” android:shadowDx=”0” android:shadowDy=”2” android:shadowRadius=”1” 效果(向下为正) 下面改变半径: android:shadowDx=”1” android:shadowDy=”1” android:shadowRadius=”1” 阅

android SQLite3

SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的新特性。这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。查看关键字列表 。 如下语法表格中,纯文本用蓝色粗体显示。非终极符号为斜体红色。作为语法一部分的运算符用黑色Roman字体表示。 这篇文档只是对SQLite实现的SQL语法的综述,有所忽略。想要得到更详细的信息,参考源代码和语法文件“parse.y”。 SQLite执行如下的语法: ALTER TABLE ANALYZE ATTACH DATABASE BEGIN TRANSACTION 注释 COMMIT TRANSACTION COPY CREATE INDEX CREATE TABLE CREATE TRIGGER CREATE VIEW DELETE DETACH DATABASE DROP INDEX DROP TABLE DROP TRIGGER DROP VIEW END TRANSACTION EXPLAIN 表达式 INSERT ON CONFLICT子句 PRAGMA REINDEX REPLACE ROLLBACK TRANSACTION SELECT UPDATE VACUUM ALTER TABLE sql-statement ::= ALTER TABLE [ database-name . ] table-name alteration alteration ::= RENAME TO new-table-name alteration ::= ADD [COLUMN ] column-def SQLite版本的的ALTER TABLE命令允许用户重命名或添加新的字段到已有表中,不能从表中删除字段。 RENAME TO语法用于重命名表名[database-name.]table-name 到new-table-name 。这一命令不能用于在附加数据库之间移动表,只能在同一个数据库中对表进行重命名。 若需要重命名的表有触发器或索引,在重命名后它们依然属于该表。但若定义了视图,或触发器执行的语句中有提到 表的名字,则它们不会被自动改为使用新的表名。若要进行这一类的修改,则需手工撤销并使用新的表名重建触发器或视图。 ADD [COLUMN]语法用于在已有表中添加新的字段。新字段总是添加到已有字段列表的末尾。Column-def 可以是CREATE TABLE中允许出现的任何形式,且须符合如下限制: 字段不能有主键或唯一约束。 字段不能有这些缺省值:CURRENT_TIME, CURRENT_DATE或CURRENT_TIMESTAMP 若定义了NOT NULL约束,则字段必须有一个非空的缺省值。 ALTER TABLE语句的执行时间与表中的数据量无关,它在操作一个有一千万行的表时的运行时间与操作仅有一行的表时是一样的。 在对数据库运行ADD COLUMN之后,该数据库将无法由SQLite 3.1.3及更早版本读取,除非运行VACUUM 命令。 ANALYZE sql-statement ::= ANALYZE sql-statement ::= ANALYZE database-name sql-statement ::= ANALYZE [ database-name . ] table-name ANALYZE 命令令集合关于索引的统计信息并将它们储存在数据库的一个特殊表中,查询优化器可以用该表来制作更好的索引选择。若不给出参数,所有附加数据库中的所有索 引被分析。若参数给出数据库名,该数据库中的所有索引被分析。若给出表名 作参数,则只有关联该表的索引被分析。 最初的实现将所有的统计信息储存在一个名叫sqlite_stat1 的表中。未来的加强版本中可能会创建名字类似的其它表,只是把“1”改为其它数字。sqlite_stat1 表不能够被撤销 ,但其中的所有内容可以被删除 ,这是与撤销该表等效的行为。 ATTACH DATABASE ATTACH DATABASE语句将一个已存在的数据库添加到当前数据库连接。若文件名含标点符号,则应用引号引起来。数据库名’main’和’temp’代表主数据库和用于存放临时表的数据库,它们不能被拆分。拆分数据库使用DETACH DATABASE 语句。 你可以读写附加数据库,或改变其结构。这是SQLite 3.0提供的新特性。在SQLite 2.8中,改变附加数据库的结构是不允许的。 在附加数据库中添加一个与已有表同名的表是不允许的。但你可以附加带有与主数据库中的表同名的表的数据库。也可以多次附加同一数据库。 使 用database-name.table-name 来引用附加数据库中的表。若附加数据库中的表与主数据库的表不重名,则不需加数据库名作为前缀。当数据库被附加时,它的所有不重名的表成为该名字指向的缺 省表。之后附加的任意与之同名的表需要加前缀。若“缺省”表被拆分,则最后附加的同名表变为“缺省”表。 若主数据库不是 “:memory:”,多附加数据库的事务是原子的。若主数据库是“:memory:”则事务在每个独立文件中依然是原子的。但若主机在改变两个或更多数 据库的COMMIT语句进行时崩溃,则可能一部分文件被改变而其他的保持原样。附加数据库的原子性的提交 是SQLite 3.0的新特性。在SQLite 2.8中,所有附加数据库的提交类似于主数据库是“:memory:”时的情况。 对附加数据库的数目有编译时的限制,最多10个附加数据库。 BEGIN TRANSACTION sql-statement ::= BEGIN [ DEFERRED | IMMEDIATE | EXCLUSIVE ] [TRANSACTION [ name ] ] sql-statement ::= END [TRANSACTION [ name ] ] sql-statement ::= COMMIT [TRANSACTION [ name ] ] sql-statement ::= ROLLBACK [TRANSACTION [ name ] ] 从2.0版开始,SQLite支持带有回退和原子性的提交的事务处理。 可选的事务名称会被忽略。SQLite目前不允许嵌套事务。 在事务之外,不能对数据库进行更改。如果当前没有有效的事务,任何修改数据库的命令(基本上除了SELECT以外的所有SQL命令)会自动启动一个事务。命令结束时,自动启动的事务会被提交。 可 以使用BEGIN命令手动启动事务。这样启动的事务会在下一条COMMIT或ROLLBACK命令之前一直有效。但若数据库关闭或出现错误且选用 ROLLBACK冲突判定算法时,数据库也会ROLLBACK。查看ON CONFLICT 子句获取更多关于ROLLBACK冲突判定算法的信息。 在SQLite 3.0.8或更高版本中,事务可以是延迟的,即时的或者独占的。“延迟的”即是说在数据库第一次被访问之前不获得锁。这样就会延迟事务,BEGIN语句本 身不做任何事情。直到初次读取或访问数据库时才获取锁。对数据库的初次读取创建一个SHARED锁 ,初次写入创建一个RESERVED锁。由于锁的获取被延迟到第一次需要时,别的线程或进程可以在当前线程执行BEGIN语句之后创建另外的事务 写入数据库。若事务是即时的,则执行BEGIN命令后立即获取RESERVED锁,而不等数据库被使用。在执行BEGIN IMMEDIATE之后,你可以确保其它的线程或进程不能写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE,但其它进程可以读取数据库。独占事务在所有的数据库获取EXCLUSIVE锁,在执行BEGIN EXCLUSIVE之后,你可以确保在当前事务结束前没有任何其它线程或进程 能够读写数据库。 有关SHARED、RESERVED和EXCLUSIVE锁可以参见这里 。 SQLite 3.0.8的默认行为是创建延迟事务。SQLite 3.0.0到3.0.7中延迟事务是唯一可用的事务类型。SQLite 2.8或更早版本中,所有的事务都是独占的。 COMMIT命令在所有SQL命令完成之前并不作实际的提交工作。这样若两个或更多个SELECT语句在进程中间而执行COMMIT时,只有全部SELECT语句结束才进行提交。 执行COMMIT可能会返回SQLITE_BUSY错误代码。这就是说有另外一个线程或进程获取了数据库的读取锁,并阻止数据库被改变。当COMMIT获得该错误代码时,事务依然是活动的,并且在COMMIT可以在当前读取的线程读取结束后再次试图读取数据库。 END TRANSACTION sql-statement ::= BEGIN [ DEFERRED | IMMEDIATE | EXCLUSIVE ] [TRANSACTION [ name ] ] sql-statement ::= END [TRANSACTION [ name ] ] sql-statement ::= COMMIT [TRANSACTION [ name ] ] sql-statement ::= ROLLBACK [TRANSACTION [ name ] ] 从2.0版开始,SQLite支持带有回退和原子性的提交的事务处理。 可选的事务名称会被忽略。SQLite目前不允许嵌套事务。 在事务之外,不能对数据库进行更改。如果当前没有有效的事务,任何修改数据库的命令(基本上除了SELECT以外的所有SQL命令)会自动启动一个事务。命令结束时,自动启动的事务会被提交。 可 以使用BEGIN命令手动启动事务。这样启动的事务会在下一条COMMIT或ROLLBACK命令之前一直有效。但若数据库关闭或出现错误且选用 ROLLBACK冲突判定算法时,数据库也会ROLLBACK。查看ON CONFLICT 子句获取更多关于ROLLBACK冲突判定算法的信息。 在SQLite 3.0.8或更高版本中,事务可以是延迟的,即时的或者独占的。“延迟的”即是说在数据库第一次被访问之前不获得锁。这样就会延迟事务,BEGIN语句本 身不做任何事情。直到初次读取或访问数据库时才获取锁。对数据库的初次读取创建一个SHARED锁,初次写入创建一个RESERVED锁。由于锁的获取被 延迟到第一次需要时,别的线程或进程可以在当前线程执行BEGIN语句之后创建另外的事务写入数据库。若事务是即时的,则执行BEGIN命令后立即获取 RESERVED锁,而不等数据库被使用。在执行BEGIN IMMEDIATE之后,你可以确保其它的线程或进程不能写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE,但其它进程可以读取数据库。独占事务在所有的数据库获取EXCLUSIVE锁,在执行BEGIN EXCLUSIVE之后,你可以确保在当前事务结束前没有任何其它线程或进程能够读写数据库。 有关SHARED、RESERVED和EXCLUSIVE锁可以参见这里 。 SQLite 3.0.8的默认行为是创建延迟事务。SQLite 3.0.0到3.0.7中延迟事务是唯一可用的事务类型。SQLite 2.8或更早版本中,所有的事务都是独占的。 COMMIT命令在所有SQL命令完成之前并不作实际的提交工作。这样若两个或更多个SELECT语句在进程中间而执行COMMIT时,只有全部SELECT语句结束才进行提交。 执行COMMIT可能会返回SQLITE_BUSY错误代码。这就是说有另外一个线程或进程获取了数据库的读取锁,并阻止数据库被改变。当COMMIT获得该错误代码时,事务依然是活动的,并且在COMMIT可以在当前读取的线程读取结束后再次试图读取数据库。 注释 comment ::= SQL-comment | C-comment SQL-comment ::= – single-line C-comment ::= / multiple-lines [ / ] 注释不是SQL命令,但会出现在SQL查询中。它们被解释器处理为空白部分。它们可以在任何空白可能存在的地方开始 ,即使是在跨越多行的表达式中。 SQL风格的注释仅对当前行有效。 C 风格的注释可以跨越多行。若没有结束符号,注释的范围将一直延伸到输入末尾,且不会引起报错。新的SQL语句可以从多行注释结束的地方开始。C风格注释可 以嵌入任何空白可以出现的地方,包括表达式内,或其他SQL语句中间, 并且C风格的注释不互相嵌套。SQL风格的注释出现在C风格注释中时将被忽略。 COPY sql-statement ::= COPY [ OR conflict-algorithm ] [ database-name . ] table-name FROM filename [ USING DELIMITERS delim ] COPY命令在SQLite 2.8及更早的版本中可用。SQLite 3.0删除了这一命令,因为在混合的UTF-8/16环境中对它进行支持是很复杂的。在3.0版本中,命令行解释器 包含新的.import 命令,用以替代COPY。 COPY 命令是用于将大量数据插入表的一个插件。它模仿PostgreSQL中的相同命令而来。事实上,SQLite的COPY 命令就是为了能够读取PostgreSQL的备份工具pg_dump 的输出从而能够将PostgreSQL的数据轻松转换到SQLite中而设计的。 table-name是将要导入数据的一个已存在的表的名字。filename是一个字符串或标识符,用于说明作为数据来源的文件。filename可以使用STDIN 从标准输入流中获取数据。 输入文件的每一行被转换成一条单独的记录导入表中。字段用制表符分开。若某个字段的数据中出现制表符,则前面被添加反斜线“/”符号。数据中的反斜线则被替换为两条反斜线。可选的USING DELIMITERS子句可给出一个与制表符不同 的分界符。 若字段由“/N”组成,则被赋以空值NULL。 使用这一命令时,利用可选的ON CONFLICT子句可以定义替代的约束冲突判定算法。更多信息,参见 ON CONFLICT 。 当输入数据源是STDIN,输入将终止于一行仅包含一个反斜线和一个点的输入:“/. ”。 CREATE INDEX sql-statement ::= CREATE [UNIQUE ] INDEX [IF NOT EXISTS ] [ database-name . ] index-name ON table-name ( column-name [, column-name ] * ) column-name ::= name [ COLLATE collation-name ] [ ASC | DESC ] CREATE INDEX命令由“CREATE INDEX”关键字后跟新索引的名字,关键字“ON”,待索引表的名字,以及括弧内的用于索引键的字段列表构成。每个字段名可以跟随“ASC”或 “DESC”关键字说明排序法则,但在当前版本中排序法则被忽略。排序总是按照上升序。 每个字段名后跟COLLATE子句定义文本记录的比较顺序。缺省的比较顺序

Android下的图形引擎

1、AngleAngle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。 最低运行环境要求不详。 项目地址:code.google.com/p/angle/ 2、Rokon rokon是一款Android 2D游戏引擎,基于OpenGL ES技术开发,物理引擎为Box2D,因此能够实现一些较为复杂的物理效果,该项目最新版本为 2.0.3 (09/07/10)。总体来说,此引擎最大的优点在于其开发文档相当之完备,并且项目作者对反馈Bug的修正非常之神速,所以该框架的使用在目前也最为 广泛,有人干脆将它称为Cocos2d-iPhone引擎的Android版(业务逻辑和编码风格上也确实很像)。附带一提,国内某个需要注册会员才能下 载的Android游戏框架衍生于此框架,所以大家也不要刻板的认为收费便一定是好的,免费就一定不好。 最低运行环境要求为Android 1.5。 项目地址:code.google.com/p/rokon/ 3、LGame LGame是一款国人开发的Java游戏引擎,有Android及PC(J2SE)两个开发版本,目前最高版本同为0.2.6(31/07/10)。其底 层绘图器LGrpaphics封装有J2SE以及J2ME提供的全部Graphics API(PC版采用Graphics2D封装,Android版采用Canvas模拟实现),所以能够将J2SE或J2ME开发经验直接套用其中,两版本 间主要代码能够相互移植。Android版内置有Admob接口,可以不必配置XML直接硬编码Admob广告信息。 该引擎除了基本的音效、图形、物理、精灵等常用组件以外,也内置有Ioc、xml、http等常用Java组件的封装,代价是jar体积较为庞大,PC版 已突破1.2MB,Android版有所简化也在500KB左右。此外,该引擎还内置有按照1:1实现的J2ME精灵类及相关组件,可以将绝大多数 J2ME游戏平移到Android或PC版中。唯一遗憾的是,该项目作者是个极其懒惰的家伙,开发文档从去年说到今年依旧没有提供,只有游戏示例可供下 载。 最低运行环境要求为Android 1.1。 项目地址:code.google.com/p/loon-s… 4、AndEngine andengine同样是一款基于OpenGL ES技术的Android游戏引擎,物理引擎同样为Box2D(标配 )。该框架性能普通,文档缺乏,但示例较为丰富。 最低运行环境要求不详。 项目地址(未直接提供jar下载,源码可通过svn提取):code.google.com/p/andeng… 5、libgdx libgdx是一款基于OpenGL ES技术开发的Android游戏引擎,支持Android平台下的2D游戏开发,物理引擎采用Box2D实现。单就性能角度来说,堪称是一款非常强大的 Android游戏引擎,但缺陷在于精灵类等相关组件在使用上不够简化,而且文档也较为匮乏。 最低运行环境要求不详。 项目地址:code.google.com/pbgdx/ 6、jPCT jPCT是一款基于OpenGL技术开发的3D图形引擎(PC环境为标准OpenGL,Android为OpenGL ES), 以Java语言为基础的,拥有功能强大的Java 3D解决方案。该引擎与LGame(此为2D游戏引擎)相类似,目前拥有PC(J2SE)以及Android两个开发版本。 jPCT的最大优势之一,就在于它惊人的向下兼容性。在PC环境中,jPCT甚至可以运行在JVM1.1环境之中,因为jPCT内部提供的图形渲染接口完 全符合所有的Java 1.1规范(就连已经消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。 最低运行环境要求为Android 1.5。 项目地址:http://www.jpct.net/jpct-ae/ 7、Alien3d Alien3d是一款体积非常之小的Android 3D游戏引擎,基于OpenGL ES技术开发。为了压缩体积,它根据不同功能采用多jar方式发布(包括alien3d-engine.jar,alien3d- tiled.jar,alien3d-sprites.jar,alien3d-shapes.jar,alien3d- particles2d.jar,),事实上它的核心文件大约只有40KB,所有相关jar的总和也不足150KB。 最低运行环境要求为Android 1.5。 项目地址:code.google.com/p/alien3d/ 8、Catcake Catcake是一款跨平台的Java 3D图形引擎,目前支持PC(J2SE)及Android环境运行(已有iPhone版规划)。该引擎在易用性和运行性能上皆有出色的表现,支持常见的游戏开发功能,诸如精灵动画,音频处理和视频播放等。 最低运行环境要求为Android 1.6。 项目地址:code.google.com/p/catcake/