Android编程代码速查

合集下载

Android开发人员不得不收集的代码(不断更新)

Android开发人员不得不收集的代码(不断更新)

Android开发人员不得不收集的代码(不断更新)为方便查找,已进行大致归类,其目录如下所示:•尺寸相关o dp与px转换dp2px、px2dpo sp与px转换sp2px、px2spo各种单位转换applyDimensiono在onCreate()即可强行获取View的尺寸forceGetViewSizeo ListView中提前测量View尺寸measureView•设备相关o获取设备MAC地址getMacAddresso获取设备厂商,如Xiaomi getManufacturero获取设备型号,如MI2SC getModelo获取设备SD卡是否可用isSDCardEnableo获取设备SD卡路径getSDCardPath•手机相关o判断设备是否是手机isPhoneo获取手机的IMIE getDeviceIMEIo获取手机状态信息getPhoneStatuso拨打电话callDialo发送短信sendSmso获取手机联系人getAllContactInfoo打开手机联系人界面点击联系人后便获取该号码getContantNumo获取手机短信并保存到xml中getAllSMS•网络相关o打开网络设置界面openWirelessSettingso判断是否网络连接isConnectedo判断wifi是否连接状态isWifiConnectedo获取移动网络运营商名称getNetworkOperatorNameo获取移动终端类型getPhoneTypeo获取连接的网络类型(2G,3G,4G) getCurNetworkTypeo获取当前手机的网络类型(WIFI,2G,3G,4G) getNetWorkStatus•App相关o安装指定路径下的Apk installApko卸载指定包名的App uninstallAppo获取App名称getAppNameo获取当前App版本号getVersonNameo获取当前App版本Code getVersionCodeo打开指定包名的App openOtherAppo打开指定包名的App应用信息界面showAppInfoo分享Apk信息shareApkInfoo获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)getAppInfoso判断当前App处于前台还是后台isApplicationBackground•屏幕相关o获取手机分辨率getDeviceWidth、getDeviceHeighto获取状态栏高度getStatusBarHeighto获取状态栏高度+标题栏(ActionBar)高度getTopBarHeighto获取屏幕截图snapShotWithStatusBar、snapShotWithoutStatusBaro设置透明状态栏,需在setContentView之前调用•键盘相关o避免输入法面板遮挡o动态隐藏软键盘hideSoftInputo点击屏幕空白区域隐藏软键盘o动态显示软键盘showSoftInputo切换键盘显示与否状态toggleSoftInput•正则相关o正则工具类•加解密相关o MD5加密encryptMD5o SHA加密encryptSHA•未归类o获取服务是否开启isRunningService•更新Log做这份整理只是想把它作为Android的一本小字典,当遇到一些琐碎问题时,不用再面向百度或者谷歌查询API的使用,费时费力,这里有的话,大家尽管撸走。

Android时区及语言代码

Android时区及语言代码

Android时区及语⾔代码1. 设置默认时区PRODUCT_PROPERTY_OVERRIDES += \persist.sys.timezone=Asia/Shanghai\注:搜索“persist.sys.timezone”,并更改其值persist.sys.timezone值域•Marshall Islands 马绍尔群岛 Pacific/Majuro•Midway Island 中途岛 Pacific/Midway•Hawaii 夏威夷 Pacific/Honolulu•Alaska 阿拉斯加州 America/Anchorage•Pacific Time 太平洋时间 America/Los_Angeles•Tijuana 蒂华纳 America/Tijuana•Arizona 亚利桑那 America/Phoenix•Chihuahua 吉娃娃 America/Chihuahua•Mountain Time ⼭地时间 America/Denver•Central America 中美洲 America/Costa_Rica•Central Time 美国中部时间 America/Chicago•Mexico City 墨西哥城 America/Mexico_City •Saskatchewan 萨斯喀彻温省 America/Regina•Bogota 波哥⼤ America/Bogota•Eastern Time 东部时间 America/New_York•Atlantic Time (Barbados) ⼤西洋时间(巴巴多斯) America/Barbados •Atlantic Time (Canada) ⼤西洋时间(加拿⼤) America/Halifax •Manaus 马瑙斯 America/Manaus•Santiago 圣地亚哥 America/Santiago•Newfoundland 纽芬兰 America/St_Johns•Brasilia 巴西利亚 America/Sao_Paulo•Buenos Aires 布宜诺斯艾利斯 America/Argentina/Buenos_Aires •Greenland 格陵兰 America/Godthab•Montevideo 蒙得维的亚 America/Montevideo•Mid-Atlantic 中⼤西洋 Atlantic/South_Georgia•Azores 亚速尔群岛 Atlantic/Azores•Cape Verde Islands 佛得⾓群岛 Atlantic/Cape_Verde •Casablanca 卡萨布兰卡 Africa/Casablanca•London, Dublin 伦敦,都柏林 Europe/London •Amsterdam, Berlin 阿姆斯特丹,柏林 Europe/Amsterdam•Belgrade 贝尔格莱德 Europe/Belgrade•Venezuela 委内瑞拉 America/CaracasBrussels 布鲁塞尔 Europe/Brussels•Sarajevo 萨拉热窝 Europe/Sarajevo•Windhoek 温得和克 Africa/Windhoek•W. Africa Time W.⾮洲时间 Africa/Brazzaville•Amman, Jordan 约旦安曼, Asia/Amman•Athens, Istanbul 雅典,伊斯坦布尔 Europe/Athens•Beirut, Lebanon 贝鲁特,黎巴嫩 Asia/Beirut•Cairo 开罗 Africa/Cairo•Helsinki 赫尔⾟基 Europe/Helsinki•Jerusalem 耶路撒冷 Asia/Jerusalem•Minsk 明斯克 Europe/Minsk•Harare 哈拉雷 Africa/Harare•Baghdad 巴格达 Asia/Baghdad•Moscow 莫斯科 Europe/Moscow•Kuwait 科威特 Asia/Kuwait•Nairobi 内罗毕 Africa/Nairobi•Tehran 德⿊兰 Asia/Tehran•Baku 巴库 Asia/Baku•Tbilisi 第⽐利斯 Asia/Tbilisi•Yerevan 埃⾥温 Asia/Yerevan•Dubai 迪拜 Asia/Dubai•Kabul 喀布尔 Asia/Kabul•Islamabad, Karachi 伊斯兰堡,卡拉奇 Asia/Karachi•Ural'sk Ural'sk Asia/Oral•Yekaterinburg 叶卡捷琳堡 Asia/Yekaterinburg•Kolkata 加尔各答 Asia/Calcutta•Sri Lanka 斯⾥兰卡 Asia/Colombo •Kathmandu 加德满都 Asia/Katmandu •Astana 阿斯塔纳 Asia/Almaty •Yangon 仰光 Asia/Rangoon •Krasnoyarsk 克拉斯诺亚尔斯克 Asia/Krasnoyarsk •Bangkok 曼⾕ Asia/Bangkok•Beijing 北京 Asia/Shanghai•Hong Kong ⾹港 Asia/Hong_Kong •Irkutsk 伊尔库次克 Asia/Irkutsk •Kuala Lumpur 吉隆坡 Asia/Kuala_Lumpur •Perth 珀斯 Australia/Perth•Taipei 台北 Asia/Taipei•Seoul 汉城 Asia/Seoul •Tokyo, Osaka 东京,⼤阪 Asia/Tokyo •Yakutsk 雅库茨克 Asia/Yakutsk •Adelaide 阿德莱德 Australia/Adelaide •Darwin 达尔⽂ Australia/Darwin •Brisbane 布⾥斯班 Australia/Brisbane •Hobart 霍巴特 Australia/Hobart •Sydney, Canberra 悉尼,堪培拉 Australia/Sydney •Vladivostok 符拉迪沃斯托克 Asia/Vladivostok •Guam 关岛 Pacific/Guam •Magadan 马加丹 Asia/Magadan •Auckland 奥克兰 Pacific/Auckland•Fiji 斐济 Pacific/Fiji•Tonga 汤加 Pacific/Tongatapu2. 设置默认语⾔PRODUCT_PROPERTY_OVERRIDES += \nguage=EN\nguage=EN\persist.sys.country=US\ro.product.region=USLANGUAGE-COUNTRY•简体中⽂(中国) zh-cn 繁体中⽂(台湾地区) zh-tw•繁体中⽂(⾹港) zh-hk 英语(⾹港) en-hk•英语(美国) en-us 英语(英国) en-gb•英语(全球) en-ww 英语(加拿⼤) en-ca•英语(澳⼤利亚) en-au 英语(爱尔兰) en-ie•英语(芬兰) en-fi 芬兰语(芬兰) fi-fi•英语(丹麦) en-dk 丹麦语(丹麦) da-dk•英语(以⾊列) en-il 希伯来语(以⾊列) he-il•英语(南⾮) en-za 英语(印度) en-in•英语(挪威) en-no 英语(新加坡) en-sg•英语(新西兰) en-nz 英语(印度尼西亚) en-id•英语(菲律宾) en-ph 英语(泰国) en-th•英语(马来西亚) en-my 英语(阿拉伯) en-xa•韩⽂(韩国) ko-kr ⽇语(⽇本) ja-jp•荷兰语(荷兰) nl-nl 荷兰语(⽐利时) nl-be•葡萄⽛语(葡萄⽛) pt-pt 葡萄⽛语(巴西) pt-br•法语(法国) fr-fr 法语(卢森堡) fr-lu•法语(瑞⼠) fr-ch 法语(⽐利时) fr-be•法语(加拿⼤) fr-ca 西班⽛语(拉丁美洲) es-la•西班⽛语(西班⽛) es-es 西班⽛语(阿根廷) es-ar•西班⽛语(美国) es-us 西班⽛语(墨西哥) es-mx•西班⽛语(哥伦⽐亚) es-co 西班⽛语(波多黎各) es-pr•德语(德国) de-de 德语(奥地利) de-at•德语(瑞⼠) de-ch 俄语(俄罗斯) ru-ru•意⼤利语(意⼤利) it-it 希腊语(希腊) el-gr•挪威语(挪威) no-no 匈⽛利语(匈⽛利) hu-hu•⼟⽿其语(⼟⽿其) tr-tr 捷克语(捷克共和国) cs-cz•斯洛⽂尼亚语 sl-sl 波兰语(波兰) pl-pl•瑞典语(瑞典) sv-se 西班⽛语 (智利) es-cl。

Android反编译查看源代码

Android反编译查看源代码

Android是个神奇的货,近两年比较火热,学习他的人也比较多,但是对于很多初学者来说比较头疼,(当然本人也很菜鸟),今天在学习一个安卓项目时,苦于找不到源代码,无奈只好下载网上现成的.apk文件,顿时好奇能不能反编译看到源代码呢?答案是肯定的!让我们行动起来!
首先,我们将文件的后缀名改为.zip。

这时候我们将可以解压这个文件,如图:
此处我们已经看到一个压缩文件了,打开它。

注意我们的重点是.dex 文件
这个classes.dex是个好东西呀!
然后,然后……
我们需要下两个软件:
dex2jar下载地址:/p/dex2jar/
JD-GUI下载地址:http://java.decompiler.free.fr/?q=jdgui
把我们刚找到的classes.dex拷贝到dex2jar的目录下吧(与dex2jar.bat在同一个目录下),然后运行dex2jar.bat classes.dex,将会生成一个文件classes_dex2jar.jar。

快OK 啦~~~~
运行jd-gui.exe 直接将classes_dex2jar.jar 拖进去吧,瞧!我们要的出来了!。

android常用代码大全

android常用代码大全

Android常用代码大全Notepad++编写可以负责粘贴到其中去看得更清楚。

(内容包括了Android中的大部分常用控件及其事件的监听)第一章1.1 Android中src文件夹包含项目的所有包及其资源文件,res文件夹包含了项目中所有的资源。

比如:程序图标(drawable),布局文件(layout),常量(value),音频文件(raw)R.java是在创建项目是自动生成的只读文件,不可更改此文件。

R文件其作用:是定义项目中所有资源的索引文件。

1.2 AndroidManfest.xml 如下:<?xml version="1.0" encoding="utf-8"?><manifest //根节点,描述了packege包中所有的内容xmlns:android="/apk/res/android" //包命名空间的声明,使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据package="Android.Summary" //引用程序包名android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="7" /> //使用SDK版本号<application //包含package中application级别组件声明的根节点,可包含application的一些全局和默认的属性,如标签label,icon,主题,必要的全限。

注意:一个manifest中只能包含一个或0个application android:icon="@drawable/icon" //应用程序图标android:label="@string/app_name"> //应用程序名字<activity android:name=".SummaryActivity" //Activity用来与用户交互的主要工具,是用户打开程序的初始界面.此处为引用程序默认启动的Activityandroid:label="@string/app_name"><intent-filter>/ //描述了Activity的启动时间和位置,另外为了支持查找Activity可以包含一个或多个<intent-filter><actionandroid:name="android.intent.action.MAIN" /> //acton 为组件支持的Intent action<categoryandroid:name="UNCHER" />//categor 为组件支持的Intent category 这里指定了引用程序的默认启动的Activity</intent-filter></activity><activity android:name = "Activity02"></activity> //在此对新增的Activity进行注册。

Android 新手的要看的逻辑代码(一)

Android 新手的要看的逻辑代码(一)

接下来需要对主逻辑进行开发,步骤如下所示。

搭建界面即开发main.xml文件,该文件非常简单,代码如下所示。

Java代码:1.<?xml version="1.0" encoding="utf-8"?>2.<!-- 声明xml的版本以及编码格式 -->3.<LinearLayoutxmlns:android="/apk/res/android" 3android:orientation="vertical"4.android:layout_width="fill_parent"5.android:layout_height="fill_parent"6.>7.<!-- 添加一个垂直的线性布局 -->8.<wyf.ytl.MainView9.android:id="@+id/mainView"10.android:layout_width="fill_parent"11.android:layout_height="fill_parent"12./>13.<!-- 向线性布局中添加一个自定义的View -->14.</LinearLayout>复制代码说明:该布局非常简单,只需将自定义的View添加到一个垂直的线性布局中即可。

开发主逻辑代码,即读取手机的姿态,然后改变小水泡的坐标。

首先搭建Sample.java的代码框架,如下所示。

Java代码:1.package eoe.demo;2.//声明所在包3.importorg.openintents.sensorsimulator.hardware.SensorManagerSimulator ;4.//引入相关类5.import android.app.Activity;6.//引入相关类7.import android.hardware.SensorListener;8.//引入相关类9.import android.hardware.SensorManager;10.//引入相关类11.import android.os.Bundle;12.//引入相关类13.public class Sample extends Activity {14.MainView mv;15.//主View16.int k = 45;17.//灵敏度18.private SensorManagerSimulator mySensorManager;19.//SensorManager对象引用20.//private SensorManager mySensorManager;21.//SensorManager对象引用22.@Override23.public void onCreate(Bundle savedInstanceState) {24.super.onCreate(savedInstanceState);25.setContentView(yout.main);26.//设置当前的用户界面27.mv = (MainView) findViewById(R.id.mainView);28.//获取主View29.//mySensorManager =(SensorManager)getSystemService(SENSOR_SERVICE);30.//获得SensorManager31.//调试时用32.mySensorManager = SensorManagerSimulator.getSystemService(this,SENSOR_ SERVICE); mySensorManager.connectSimulator();33.}34.private SensorListener mySensorListener = new SensorListener(){35.//监听器36.@Override37.public void onAccuracyChanged(int sensor, int accuracy) {38.}39.//重写onAccuracyChanged方法40.@Override41.public void onSensorChanged(int sensor, float[] values) {42.//重写onSensorChanged方法43.//此处省略的是接收手机姿态的数据并进行处理的代码,将在之后进行介绍44.}45.public boolean isContain(int x, int y){46.//判断点是否在圆内47.int tempx = (int) (x + mv.small.getWidth()/2.0);48.//得到水泡tempx坐标49.int tempy = (int) (y + mv.small.getWidth()/2.0);50.//得到水泡tempy坐标51.int ox = (int) (mv.big_X + mv.big.getWidth()/2.0);52.//得到大圆的X坐标53.int oy = (int) (mv.big_X + mv.big.getWidth()/2.0);54.//得到大圆的Y坐标55.if(Math.sqrt((tempx-ox)*(tempx-ox)+(tempy-oy)*(tempy-oy))36 >(mv.big.getWidth()/2.0-mv.small.getWidth()/2.0)){56.return false;57.//不在圆内58.}59.else {60.return true;61.//在圆内62.}63.}64.};65.@Override66.protected void onResume() {67.//重写的onResume方法68.mySensorManager.registerListener(69.//注册监听70.mySensorListener,71.//监听器SensorListener对象72.SensorManager.SENSOR_ORIENTATION,73.//传感器的类型为姿态74.SensorManager.SENSOR_DELAY_UI //频度75.);76.super.onResume();77.}78.@Override79.protected void onPause() {80.//重写onPause方法81.mySensorManager.unregisterListener(mySensorListener);82.//取消注册监听器83.super.onPause();84.}85.86.}复制代码。

安卓系统代码查询大全

安卓系统代码查询大全

安卓系统代码查询大全不保证所有指令都能在Android(安卓)系统所有版本上有效*#06# 显示手机原厂出厂串号(移动通信国际识别码)*#*#4636#*#* 显示手机信息、电池信息、电池历史记录、使用情况统计、Wifi information*#*#7780#*#* 重设为原厂设定,不会删除预设程序,及SD卡档案*2767*3855# 重设为原厂设定,会删除SD卡所有档案*#*#34971539#*#* 显示相机韧体版本,或更新相机韧体*#*#7594#*#* 当长按关机按钮时,会出现一个切换手机模式的窗口,包括: 静音模式、飞航模式及关机,你可以用以上代码,直接变成关机按钮*#*#273283*255*663282*#*#* 开启一个能让你备份媒体文件的地方,例如相片、声音及影片等*#*#197328640#*#* 启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS及蓝牙测试的代码*#*#232339#*#*或*#*#526#*#*或*#*#528#*#* WLAN测试*#*#232338#*#* 显示WiFiMAC地址*#*#1472365#*#* GPS测试*#*#1575#*#* 其它GPS测试*#*#232331#*#* 蓝牙测试*#*#232337#*#* 显示蓝牙装置地址*#*#8255#*#* 启动GTalk服务监视器显示手机软件版本的代码*#*#4986*2650468#*#* PDA、Phone、H/W、RFCallDate*#*#1234#*#* PDA及Phone*#*#1111#*#* FTASW版本*#*#2222#*#* FTAHW版本*#*#44336#*#* PDA、Phone、CSC、Build Time、Changelist number 各项硬件测试*#*#0283#*#* Packet Loopback*#*#0*#*#* LCD测试*#*#0673#*#*或*#*#0289#*#* Melody测试*#*#0842#*#* 装置测试,例如振动、亮度*#*#2663#*#* 触控屏幕版本*#*#2664#*#* 触控屏幕测试*#*#0588#*#* 接近感应器测试*#*#3264#*#* 内存版本。

安卓手机命令代码

安卓手机命令代码

*#*#4636#*#*代码详解:WCDMA preferred:意为WCDMA首选,GSM电话2G、3G数据通信都能使用;但是会主动去检查3G信号强度,切换到3G的阀值比较低(即容易切换到3G网络)。

GSM only:GSM电话只能用2G数据通信,2G信号强度过低,就收不到任何信号,玩完了。

WCDMA only:GSM电话只能用3G数据通信,3G信号强度过低,就没得玩了。

GSM auto (PRL):GSM电话2G、3G数据通信都能使用;信号强度低时,2G网络受到优待选择。

但疑虑是:PRL主要是跟CDMA技术有联系,与GSM技术则无关。

此选项切换到3G网络的阀值较高,比WCDMA preferred 节电。

CDMA auto (PRL):CDMA电话2G、3G数据通信都能使用;信号强度低时,2G网络受到优待选择。

CDMA only:CDMA电话只能用2G数据通信,2G信号强度过低,就没得玩了。

EvDo only:CDMA电话只能用3G数据通信,3G信号强度过低,就没得玩了。

GSM/CDMA auto (PRL):GSM和CDMA双模电话使用会比较好。

我用的是普通移动卡(2G非3G)选的GSM only*#*#4636#*#*显示手机信息、电池信息、电池记录、使用统计数据、WIFI信息*#*#7780#*#*重设为原厂设定,不会删除预设程序及SD卡档案*2667*3855#重设为原厂设定,会删除SD卡所有档案*#*#34971539#*#*显示相机相机韧体版本,或更新相机韧体*#*#7594#*#*当长按关机按钮时,会出现一个切换手机模式的窗口,可以用这个代码,直接变成关机按钮*#*#273283*255*663282*#*#*开启一个能让你备份媒体文件的地方,例如相片、声音等*#*#197328640#*#*启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS 及蓝牙测试代码*#*#232338#*#*显示WIFI MAC地址*#*#1472365#*#* GPS测试*#*#1575#*#*其他GPS测试*#*#232331#*#蓝牙测试*#*#232337#*#显示蓝牙装置地址*#*#8255#*#*启动GTALK服务监视器各项硬件测试*#*#0283#*#* Packet Loopback*#*#0*#*#* LCD测试*#*#0842#*#*装置测试,如震动、亮度*#*#2663#*#*触控屏幕版本*#*#2664#*#*触控屏幕测试*#*#0588#*#*接近感应器测试*#*#3264#*#*内存版本*#06#显示手机原厂出厂串号(移动通信国际识别码)显示手机软件版本的代码*#*#1234#*#* PDA及PHONE*#*#1111#*#* FTA SW版本*#*#2222#*#* FTA HW版本。

Android手机指令大全

Android手机指令大全

Android手机指令大全*#*#4636#*#*显示手机信息、电池信息、电池记录、使用统计数据、WiFi信息*#*#7780#*#*重设为原厂设定,不会删除预设程序,及SD卡档案。

*2767*3855#重设为原厂设定,会删除SD卡所有档案。

*#*#34971539#*#*显示相机相机韧体版本,或更新相机韧体*#*#7594#*#*6当长按关机按钮时,会出现一个切换手机模式的窗口,包括:静音模式、飞航模式及关机,你可以用以上代码,直接变成关机按钮。

*#*#273283*255*663282*#*#*开启一个能让你备份媒体文件的地方,例如相片、声音及影片等*#*#197328640#*#*启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS及蓝牙测试的代码*#*#232339#*#*或*#*#526#*#*或*#*#528#*#*–WLAN测试*#*#232338#*#*–显示WiFiMAC地址*#*#1472365#*#*–GPS测试*#*#1575#*#*–其它GPS测试*#*#232331#*#*–蓝牙测试*#*#232337#*#–显示蓝牙装置地址*#*#8255#*#*启动GTalk服务监视器显示手机软件版本的代码*#*#4986*2650468#*#*–PDA、Phone、H/W、RFCallDate*#*#1234#*#*–PDA及Phone*#*#1111#*#*–FTASW版本*#*#2222#*#*–FTAHW版本*#*#44336#*#*–PDA、Phone、csc、buildTime、、changelistnumber各项硬件测试*#*#0283#*#*–PacketLoopback*#*#0*#*#*–LCD测试*#*#0673#*#*或*#*#0289#*#*–Melody测试*#*#0842#*#*–装置测试,例如振动、亮度*#*#2663#*#*–触控屏幕版本*#*#2664#*#*–触控屏幕测试*#*#0588#*#*–接近感应器测试*#*#3264#*#*–内存版本描述:*#*#197328640#*#*启动服务模式,可以测试手机部分设置及更改设定WLAN、GPS 及蓝牙测试的代码*#*#232339#*#*或*#*#526#*#*或*#*#528#*#*–WLAN测试描述:使用Android电源管理widget 从Android 2.1系统开始内置了一个非常强大的带能源管理widget,通过这个widget你可以快速开启或者关闭Wi-Fi,蓝牙,GPS,同步这些手机耗电大户,还可以方便的设定手机屏幕亮度,长按手机屏幕,就可以在widgets目录选择启用。

android常用代码大全

android常用代码大全

Android常用代码大全Notepad++编写可以负责粘贴到其中去看得更清楚。

(内容包括了Android中的大部分常用控件及其事件的监听)第一章1.1 Android中src文件夹包含项目的所有包及其资源文件,res文件夹包含了项目中所有的资源。

比如:程序图标(drawable),布局文件(layout),常量(value),音频文件(raw)R.java是在创建项目是自动生成的只读文件,不可更改此文件。

R文件其作用:是定义项目中所有资源的索引文件。

1.2 AndroidManfest.xml 如下:<?xml version="1.0" encoding="utf-8"?><manifest //根节点,描述了packege包中所有的内容xmlns:android="/apk/res/android" //包命名空间的声明,使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据package="Android.Summary" //引用程序包名android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="7" /> //使用SDK版本号<application //包含package中application级别组件声明的根节点,可包含application的一些全局和默认的属性,如标签label,icon,主题,必要的全限。

注意:一个manifest中只能包含一个或0个application android:icon="@drawable/icon" //应用程序图标android:label="@string/app_name"> //应用程序名字<activity android:name=".SummaryActivity" //Activity用来与用户交互的主要工具,是用户打开程序的初始界面.此处为引用程序默认启动的Activityandroid:label="@string/app_name"><intent-filter>/ //描述了Activity的启动时间和位置,另外为了支持查找Activity可以包含一个或多个<intent-filter><actionandroid:name="android.intent.action.MAIN" /> //acton 为组件支持的Intent action<categoryandroid:name="UNCHER" />//categor 为组件支持的Intent category 这里指定了引用程序的默认启动的Activity</intent-filter></activity><activity android:name = "Activity02"></activity> //在此对新增的Activity进行注册。

安卓手机的常用各类代码

安卓手机的常用各类代码

安卓通用代码(拨号):*#*#4636#*#*查看手机必备(这个我经常用)*#12580*369# 显示PDA,Phone,H/W,第一次打电话,内存,CSC信息.*#*#4986*2650468#*#* PDA、Phone、H/W、RFCallDate*#*#1234#*#* 显示PDA 及Phone等固件信息(有反应)*#*#1111#*#* FTA SW 版本*#*#2222#*#* FTA HW 版本*#*#44336#*#* PDA 、Phone、CSC、Build Time、Changelist number *#06# 显示IMEI号.各项硬件测试*#*#0283#*#* Audio Loopback Control*#*#0*#*#* LCD 测试*#*#0673#*#* 或*#*#0289#*#* Melody 测试*#*#0842#*#* 装置测试,例如振动、亮度*#*#2663#*#* 触控屏幕版本*#*#2664#*#* 触控屏幕测试*#*#0588#*#* 接近感应器测试*#0589# 背光灯感应器测试.*#*#3264#*#* 内存版本*#0782# 实时时钟测试.*#0673# 声音测试模式.*#0*# 通用测试,有好多项测试.*#0228# ADC Reading 其中有网络信息,其它的我也不知道是什么.*#32489# 加密信息.*#2263# 射频频段选择,如:gsm1800mhz,wcdma2100mhz等,我在galaxy tab上试好象没作用,这个可能还要硬件支持的.*#9090# Diagnostic ConfiguratioN*#7284# USB UART I2C Mode Control*#872564# USB Logging Control*#4238378# GCF Configuration*#1575# GPS控制菜单*#3214789650# LBS Test Mode*#745# RIL Dump Menu*#746# Debug Dump Menu.*#9900# 系统转存模式.*#44336# PDA 、Phone、CSC、Build Time、Changelist number各项硬件测试*#2663# TSP / TSK firmware update.*#03# NAND Flash S/N.*#273283*255*3282*# 数据创建菜单.*#273283*255*663282*# 开启一个能让你备份媒体文件的地方,例如相片、声音及影片等*#3282*727336*# Data Usage Status.*#526#或*#528# WLAN工程模式.*#80# Unknown.*#07# 测试历史记录.*#3214789# GCF Mode Status.*#272886# Auto Answer Selection.*#8736364# OTA Update Menu.*#301279# HSDPA/HSUPA 控制菜单.*#7353# Quick Test Menu.*2767*4387264636# Sellout SMS / PCODE view.*#7465625# View Phone Lock Status.*7465625*638*# Configure Network Lock MCC/MNC.#7465625*638*# Insert Network Lock Keycode.*7465625*782*# Configure Network Lock NSP.#7465625*782*# Insert Partitial Network Lock Keycode.*7465625*77*# Insert Network Lock Keycode SP.#7465625*77*# Insert Operator Lock Keycode.*7465625*27*# Insert Network Lock Keycode NSP/CP.#7465625*27*# Insert Content Provider Keycode.*#*#4636#*#*显示手机信息、电池信息、电池记录、使用统计数据、WiFi 信息*#*#7780#*#* 或*#7780# 重设为原厂设定,不会删除预设程序,及SD 卡档案。

android常用代码大全

android常用代码大全

//继承自
//重写
广东海洋大学寸金学院综合实习资料二
授课班级:13 计算机 1、2 班 授课教师:罗成裕
super.onCreate(savedInstanceState); setContentView(yout.main); } } //设置要显示的布局
第二章 2.1 Android 应用程序由四个模块组成:Activity,Service,Intent,
下面这个这个例子通过 ContentProvider 获取电话本中的数据, 然后显示 到 TextView 中去。 public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ TextView textView = new TextView(this);//得到 TextView 对象 String string
如果希望 Android 应用能够对外部事件(如电话打入时,数据网络可用 时,)做出响应,可用使用 IntentReceiver.虽然 IntentReceiver 在如上事件发生 时会使用 NotificationManager 通知用户,但它并不能生产 UI。 IntentReceiver 可以在 AndroidManifest.xml 中注册,也可在代码中使用 Context.registerReceiver 进行注册。当 IntentReceiver 被触发时,系统会在需要的时候启动应用。 各种应用还可以通过 ContentReceiver()将他们自己的 IntentReceiver 广播出 去。 ???????
1.4
main.xml 如下: <?xml version="1.0" encoding="utf-8"?>

Android开发代码走查表

Android开发代码走查表

是否对有异常抛出的方法都执行了try...catch保护? 是否函数的所有分支都有返回值? int的返回值是否合理?(负值为失败,非负值成功) 对于反复进行了int返回值判断是否定义了函数来处理? 关键代码是否做了捕获异常处理? 是否确保函数返回CORBA对象的任何一个属性都不能为null? 是否对方法返回值对象做了null检查,该返回值定义时是否被初始化? 是否对同步对象的遍历访问做了代码同步? 是否确认在对Map对象使用迭代遍历过程中没有做增减元素操作? 线程处理函数循环内部是否有异常捕获处理,防止线程抛出异常而退出? 原子操作代码异常中断,使用的相关外部变量是否恢复先前状态? 函数对错误的处理是恰当的? 实现代码中是否消除了直接常量?(用于计数起点的简单常数例外) 是否消除了导致结构模糊的连续赋值?(如a= (b=d+c )) 是否每个return前都要有日志记录? 是否有冗余判断语句?(如:if (b) return true; else return false;) 是否把方法中的重复代码抽象成私有函数? 是否在主线程(Main Thread)中进行了较为耗时的工作?(如文件读写/数 据库的读写/网络的相关操作) 是否在使用的工作线程(Work Thread)中进行了界面(UI)的相关操作? 是否阻塞了界面处理线程(UI Thread)以及是否保证界面工具包(UI toolkit)的界面处理线程的唯一可访问?
重要
Y
重要 重要 重要
Y Y Y
重要性 命名 重要 重要 注释 重要 重要
激活
级别
检查项 命名规则是否与所采用的规范保持一致? 是否遵循了最小长度最多信息原则? has/can/is前缀的函数是否返回布尔型? 注释是否较清晰且必要? 复杂的分支流程是否已经被注释? 距离较远的}是否已经被注释? 非通用变量是否全部被注释? 函数是否已经有文档注释?(功能、输入、返回及其他可选) 特殊用法是否被注释? 每行是否只声明了一个变量?(特别是那些可能出错的类型) 变量是否已经在定义的同时初始化? 类属性是否都执行了初始化? 代码段落是否被合适地以空行分隔? 是否合理地使用了空格使程序更清晰? 代码行长度是否在要求之内? 折行是否恰当? 包含复合语句的{}是否成对出现并符合规范? 是否给单个的循环、条件语句也加了{}? if/if-else/if-else if-else/do-while/switch-case语句的格式是否符合规范? 单个变量是否只做单个用途? 单行是否只有单个功能?(不要使用;进行多行合并) 单个函数是否执行了单个功能并与其命名相符? 操作符++和— —操作符的应用是否复合规范? 单个函数不超过规定行数? 缩进层数是否不超过规定? 是否已经消除了所有警告? 常数变量是否声明为final? 对象使用前是否进行了检查? 局部对象变量使用后是否被复位为NULL? 对数组的访问是否是安全的?(合法的index取值为[0, MAX_SIZE-1])。 是否确认没有同名变量局部重复定义问题? 程序中是否只使用了简单的表达式? 是否已经用()使操作符优先级明确化? 所有判断是否都使用了(常量==变量)的形式? 是否消除了流程悬挂? 是否每个if-else if-else语句都有最后一个else以确保处理了全集? 是否每个switch-case语句都有最后一个default以确保处理了全集? for循环是否都使用了包含下限不包含上限的形式?(k=0; k<MAX) XML标记书写是否完整,字符串的拼写是否正确? 对于流操作代码的异常捕获是否有finally操作以关闭流对象? 退出代码段时是否对临时对象做了释放处理? 对浮点数值的相等判断是否是恰当的?(严禁使用==直接判断) 入口对象是否都被进行了判断不为空? 入口数据的合法范围是否都被进行了判断?(尤其是数组)

安卓apk反编译查看源代码

安卓apk反编译查看源代码

安卓apk反编译查看源代码
相信很多初学者很像看看大公司比如jd,qq,淘宝手机端的商城是如何开发的,对于java开发的系统来说,大家都知道,反编译是容易的事情,如果换成android的,安装文件变成apk,那么又是什么情况了
带着好奇,我googl e了一下,分享一下:
反编译apk文件,得到其源代码的方法!!
dex2jar和JD-GUI这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享。

dex2jar下载地址:http://laichao.googl /fil es/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下载地址:http://cod e.googl /p/dex2jar/ 请下载最新版的,旧版本有bug
1.首先找到Android软件安装包中的classes.dex
方法是把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录。

windows系统下:
在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar linux、Ubuntu系统下:在终端下定位到dex2jar.sh所在目录,运行
sh dex2jar.sh classes.dex
则可生成classes.dex.dex2jar.jar
3.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码
来源:清源教育。

Android常用代码集合

Android常用代码集合

Android常用代码集合这篇文章主要记录一些常用的一些代码段,方便以后查阅,不断更新中。

1.调用浏览器,载入某网址Uri uri = Uri.parse("");Intent it = new Intent(Intent.ACTION_VIEW, uri);startActivity(it);2.Broadcast接收系统广播的intent监控应用程序包的安装、删除public class getBroadcast extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show();} else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show();}else if (Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())) {Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show();}else if (Intent.ACTION_CAMERA_BUTTON.equals(intent.getAction())) { Toast.makeText(context, "按键", Toast.LENGTH_LONG).show();}}}需要声明的权限如下AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="zy.Broadcast" android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon"android:label="@string/app_name"><activity android:name=".Broadcast"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /> </intent-filter></activity><receiver android:name="getBroadcast" android:enabled="true"><intent-filter><actionandroid:name="android.intent.action.PACKAGE_ADDED"></action><!-- <action android:name="android.intent.action.PACKAGE_CHANGED"></action> --><actionandroid:name="android.intent.action.PACKAGE_REMOVED"></action><actionandroid:name="android.intent.action.PACKAGE_REPLACED"></action><!-- <action android:name="android.intent.action.PACKAGE_RESTARTED"></action> --><!-- <action android:name="android.intent.action.PACKAGE_INSTALL"></action> --><actionandroid:name="android.intent.action.CAMERA_BUTTON"></action><data android:scheme="package"></data></intent-filter></receiver></application><uses-sdk android:minSdkVersion="3" /></manifest>3.使用Toast输出一个字符串public void DisplayToast(String str) {Toast.makeText(this,str,Toast.LENGTH_SHORT).show();}4.把一个字符串写进文件public void writefile(String str, String path) {File file;FileOutputStream out;try {// 创建文件file = new File(path);file.createNewFile();//打开文件file的OutputStreamout = new FileOutputStream(file);String infoToWrite = str;//将字符串转换成byte数组写入文件out.write(infoToWrite.getBytes());//关闭文件file的OutputStreamout.close();}catch (IOException e) {// 将出错信息打印到LogcatDisplayToast(e.toString());}}5.把文件内容读出到一个字符串public String getinfo(String path) {File file;String str="";FileInputStream in;try {//打开文件file的InputStreamfile = new File(path);in = new FileInputStream(file);//将文件内容全部读入到byte数组int length = (int)file.length();byte[] temp = new byte[length];in.read(temp, 0, length);//将byte数组用UTF-8编码并存入display字符串中str = EncodingUtils.getString(temp,TEXT_ENCODING);//关闭文件file的InputStreamin.close();}catch (IOException e) {DisplayToast(e.toString());}return str;}6.调用Android installer安装和卸载程序Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(new File("/sdcard/WorldCupTimer.apk")), "application/vnd.android.package-archive");startActivity(intent); //安装程序Uri packageURI = Uri.parse("package:zy.dnh");Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);startActivity(uninstallIntent);//正常卸载程序7.结束某个进程activityManager.restartPackage(packageName);8.设置默认来电铃声public void setMyRingtone() {File k = new File("/sdcard/Shall We Talk.mp3"); // 设置歌曲路径ContentValues values = new ContentValues();values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());values.put(MediaStore.MediaColumns.TITLE, "Shall We Talk");values.put(MediaStore.MediaColumns.SIZE, 8474325);values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");values.put(MediaStore.Audio.Media.ARTIST, "Madonna");values.put(MediaStore.Audio.Media.DURATION, 230);values.put(MediaStore.Audio.Media.IS_RINGTONE, true);values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);values.put(MediaStore.Audio.Media.IS_ALARM, false);values.put(MediaStore.Audio.Media.IS_MUSIC, false);// Insert it into the databaseUri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());Uri newUri = this.getContentResolver().insert(uri, values);RingtoneManager.setActualDefaultRingtoneUri(this,RingtoneManager.TYPE_RINGTONE, newUri);}需要的权限<uses-permissionandroid:name="android.permission.WRITE_SETTINGS"></uses-permission>模拟HOME按键Intent i=new Intent(Intent.ACTION_MAIN);i.addCategory(Intent.CATEGORY_HOME);i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(i);9.打开某一个联系人Intent intent=new Intent();String data = "content://contacts/people/1";Uri uri = Uri.parse(data);intent.setAction(Intent.ACTION_VIEW);intent.setData(uri);startActivity(intent);10.发送文件void sendFile(String path) {File mZipFile=new File(path);Intent intent = new Intent(Intent.ACTION_SEND);// intent.setClassName("com.android.bluetooth", "com.broadcom.bt.app.opp.OppLauncherActivity");// intent.setClassName("com.android.bluetooth", "com.android.bluetooth.opp.BluetoothOppLauncherActivity");intent.putExtra("subject", mZipFile.getName()); //intent.putExtra("body", "content by chopsticks"); // 正文intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(mZipFile)); // 添加附件,附件为file对象if (mZipFile.getName().endsWith(".gz")) {intent.setType("application/x-gzip"); // 如果是gz使用gzip的mime } else if (mZipFile.getName().endsWith(".txt")) {intent.setType("text/plain"); // 纯文本则用text/plain的mime} else if (mZipFile.getName().endsWith(".zip")) {intent.setType("application/zip"); // 纯文本则用text/plain的mime } else {intent.setType("application/octet-stream"); // 其他的均使用流当做二进制数据来发送}// startActivity(intent);startActivity(Intent.createChooser(intent, "选择蓝牙客户端")); }。

android常用的代码 (直接复制粘贴可用)

android常用的代码 (直接复制粘贴可用)

1.FILE工具// 创建文件,参数包括路径(不能为空),文件名称,内容publicstaticvoid makefile(String path, String filename, String content) {File dir = new File(path);if (!dir.exists()) {dir.mkdir();}// dir.mkdir();File newFile = null;if(path!=null){newFile = new File(dir.getAbsolutePath()+"/"+filename);FileOutputStream fos = null;try {newFile.createNewFile();if (newFile.exists() && newFile.canWrite()) {fos = new FileOutputStream(newFile);fos.write(content.getBytes());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (fos != null) {try {fos.flush();fos.close();} catch (IOException e) {// TODO: handle exception}}}}}2.下载图片工具publicclass DownloadPicUtil{/****@param url*@param filename*@return0没有图片;return1成功;return2IO异常;*/publicstaticint DownLoadBitmap(String url,String filename) { // TODO Auto-generated method stubInputStream inputStream= null;DefaultHttpClient client = new DefaultHttpClient();try {HttpGet request=new HttpGet(url);HttpResponse response=client.execute(request);int statusCode = response.getStatusLine().getStatusCode();if(statusCode!=HttpStatus.SC_OK){return 0;}else{HttpEntity entity =response.getEntity();inputStream = entity.getContent();Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//图片可以在这个时候存储到sdcard上saveBitmap(bitmap,filename);return 1;}}catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return 2;}finally{if(inputStream!=null){try {inputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}publicstaticvoid saveBitmap(Bitmap bitName,String filename) { String filepath = "/sdcard/baomi/";File f = new File(filepath+filename);FileOutputStream fout = null;try{f.createNewFile();fout = new FileOutputStream(f);press(pressFormat.PNG,100,fout);fout.flush();fout.close();}catch(Exception e){e.printStackTrace();}}}3.http请求工具publicclass HttpUtil{publicstatic String SESSION_ID=null;publicstatic HttpResponse getHttpResponse(HttpGet request) throws ClientProtocolException,IOException{BasicHttpParams httpParams = new BasicHttpParams();LogService.getInstance().recordLog("进入getHttpResponse");HttpConnectionParams.setConnectionTimeout(httpParams,SysConfig.nConnectionTimeout);LogService.getInstance().recordLog("超时时间为:"+SysConfig.nConnectionTimeout);HttpConnectionParams.setSoTimeout(httpParams,SysConfig.nSoTimeout);LogService.getInstance().recordLog("Socket超时时间为:"+SysConfig.nSoTimeout);DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);LogService.getInstance().recordLog("获得响应客户端");HttpResponse response=httpClient.execute(request);LogService.getInstance().recordLog("获得结果");httpClient.getConnectionManager().shutdown();LogService.getInstance().recordLog("关闭连接");return response;}publicstatic HttpResponse getHttpResponse(HttpPost request) throws ClientProtocolException,IOException{BasicHttpParams httpParams = new BasicHttpParams();HttpConnectionParams.setConnectionTimeout(httpParams,SysConfig.nConnectionTimeout);HttpConnectionParams.setSoTimeout(httpParams,SysConfig.nSoTimeout);DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);HttpResponse response=httpClient.execute(request);httpClient.getConnectionManager().shutdown();return response;}//通过url发送post请求,并返回结果publicstatic String queryStringForPost(String url){LogService.getInstance().recordLog("发送POST请求");HttpPost request = new HttpPost(url);String result=null;try {HttpResponse response=HttpUtil.getHttpResponse(request);LogService.getInstance().recordLog("POST返回状态为"+response.getStatusLine().getStatusCode());if(response.getStatusLine().getStatusCode()==200){result=EntityUtils.toString(response.getEntity());return result;}} catch (Exception e) {LogService.getInstance().recordLog("POST异常:"+e.getMessage());e.printStackTrace();result="网络异常";return result;}returnnull;}//通过url发送GET请求并返回结果publicstatic String queryStringForGet(String url){LogService.getInstance().recordLog("发送GET请求");String result=null;try {ResponseHandler<String> responseHandler =new BasicResponseHandler();HttpClient httpclient = new DefaultHttpClient();LogService.getInstance().recordLog("提交的地址为:"+url);HttpGet httpget = new HttpGet(url);result = httpclient.execute(httpget, responseHandler);LogService.getInstance().recordLog("GET返回状态为"+result);return result;} catch (Exception e) {LogService.getInstance().recordLog("GET异常:"+e.getMessage());e.printStackTrace();result="网络异常";return result;}}//通过HttpPost发送POST请求,并返回结果publicstatic String queryStringForPost(HttpPost request){ String result=null;try {HttpResponse response=HttpUtil.getHttpResponse(request);if(response.getStatusLine().getStatusCode()==200){result=EntityUtils.toString(response.getEntity());return result;}} catch (Exception e) {e.printStackTrace();result="网络异常";return result;}returnnull;}}4.JSon工具public class JSonUtil {public static String string2json(String s){StringBuilder sb = new StringBuilder(s.length()+20);sb.append('\"');for (int i=0;i<s.length();i++){char c =s.charAt(i);switch(c){case '\"':sb.append("\\\"");break;case '\\':sb.append("\\\\");break;case '/':sb.append("\\/");break;case '\b':sb.append("\\b");break;case '\f':sb.append("\\f");break;case '\n':sb.append("\\n");break;case '\r':sb.append("\\r");break;case '\t':sb.append("\\t");break;default:sb.append(c);}}sb.append('\"');return sb.toString();}public static String number2json(Number number){ return number.toString();}public static String boolean2json(Boolean bool){ return bool.toString();}public static String map2json(Map map){if(map.isEmpty()){return "[]";}StringBuilder sb = new StringBuilder(map.size()<<4); sb.append("{");Set<String> keys = map.keySet();for(String key :keys){Object value = map.get(key);sb.append('\"');sb.append(key);sb.append('\"');sb.append(":");sb.append(tojson(value));sb.append(',');}sb.setCharAt(sb.length()-1, '}');return sb.toString();}public static String array2json(Object[] array){if(array.length==0){return "[]";}StringBuilder sb = new StringBuilder(array.length<<4); sb.append("[");for(Object o:array){sb.append(tojson(o));sb.append(',');}sb.setCharAt(sb.length()-1, ']');return sb.toString();}public static String tojson(Object o){if(o==null)return "null";if(o instanceof String)return string2json((String)o);if(o instanceof Boolean)return boolean2json((Boolean)o);if(o instanceof Number)return number2json((Number)o);if(o instanceof Map)return map2json((Map)o);if(o instanceof Object[])return array2json((Object[])o);throw new RuntimeException("Unsupported type :"+o.getClass().getName());}/*Servlet 输出jsonresponse.setContentType("application/json;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriter pw = response.getWriter();pw.write(JSonUtil.tojson(obj));pw.flush();*/}5.Stirng encode 转ucs2码双字节publicclass StringUtil {publicstatic String StringToHex(String input) {String result = "";if (input != null) {byte[] bytes = null;try {bytes = input.getBytes("UTF-16BE");} catch (Exception e) {// TODO Auto-generated catch blockreturnnull;}StringBuffer reValue = new StringBuffer();StringBuffer tem = new StringBuffer();for (int i = 0; i < bytes.length; i++) {tem.delete(0, tem.length());tem.append(Integer.toHexString(bytes[i] & 0xFF));if (tem.length() == 1) {tem.insert(0, '0');}reValue.append(tem);}result = reValue.toString().toUpperCase();return result;} else {return"";}}publicstatic String HexToUTF16BE(String input) {String result = "";if (input != null) {byte[] bytes1 = newbyte[input.length() / 2];for (int i = 0; i < input.length(); i += 2) {bytes1[i / 2] = (byte)(Integer.parseInt(input.substring(i,i + 2), 16));}try {result = new String(bytes1, "UTF-16BE");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blockreturn null;}return result;} else {return "";}}}6.Notification实例NotificationManagernotificationManager=(NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);//定义一个NotificationNotification m_notification = new Notification();//设置Notification的各种属性//设置通知在状态栏的图标m_notification.icon = R.drawable.icon;//当我们点击通知时显示的内容m_notification.tickerText = "BUTTON1通知内容";//通知时发出的默认声音m_notification.defaults = Notification.DEFAULT_SOUND;//设置通知显示的参数Intent intent = new Intent();PendingIntent m_pendingIntent =PendingIntent.getActivity(testNotification.this,0,intent,0);m_notification.setLatestEventInfo(testNotification.this,"BUTTON", "BUTTON1通知内容",m_pendingIntent);//开始执行通知i++;notificationManager.notify(i,m_notification);7.POSTURL Theardpublicclass PostThread extends Thread {privatestatic Context context;private PostURL[] posturls;private HttpResponse httpResponse;private DefaultHttpClient httpClient;private HttpPost httpRequest;privatestatic BasicHttpParams httpParams;privatestatic PostURLAdapter adapter;private String[] sparams ;private String[] sfiles;private List<NameValuePair>params ;public PostThread(Context context) {super();this.context = context;adapter = new PostURLAdapter(context);adapter.open();httpParams = new BasicHttpParams();HttpConnectionParams.setConnectionTimeout(httpParams,SysConfig.nConnectionTimeout);HttpConnectionParams.setSoTimeout(httpParams,SysConfig.nSoTimeout);httpClient = new DefaultHttpClient(httpParams);}publicstaticint PostWithFile(String posturl,Map<String,String> postparam,Map<String,String> postfile,String type){String end = "\r\n";String prefix = "--";String boundary = "*****";try {URL url = new URL(posturl);HttpURLConnection con = (HttpURLConnection)url.openConnection();StringBuilder sb = new StringBuilder();FileInputStream fStream=null;/* 允许Input、Output,不使用Cache */con.setConnectTimeout(SysConfig.nConnectionTimeout);con.setReadTimeout(SysConfig.readFileTimeout);con.setDoInput(true);con.setDoOutput(true);con.setUseCaches(false);/* 设置传送的method=POST */con.setRequestMethod("POST");/* setRequestProperty */con.setRequestProperty("Connection", "keep-alive");con.setRequestProperty("Charset", "UTF-8");con.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);// // 拼接参数(不包括文件)List<NameValuePair>localparams =new ArrayList<NameValuePair>();for (Map.Entry<String,String> entry : postparam.entrySet()) {sb.append(prefix);sb.append(boundary);sb.append(end);sb.append("Content-Disposition:form-data;name=\"" + entry.getKey()+"\""+end+"Content-Type:text/plain;Charset=UTF-8"+end );if(type.equals("0")){sb.append("Content-Transfer-Encoding:8bit"+end+end+ entry.getValue() + end);}else{sb.append("Content-Transfer-Encoding:8bit"+end+end+ ((entry.getValue()==null||entry.getValue().equals(""))?StringUtil.Str ingToHex(""):StringUtil.StringToHex(entry.getValue())) + end);}}// /* 设置DataOutputStream */DataOutputStream ds =new DataOutputStream(con.getOutputStream());String t=sb.toString();ds.write(sb.toString().getBytes());//发送文件for (Map.Entry<String, String> entry : postfile.entrySet()) {sb = new StringBuilder();sb.append(prefix);sb.append(boundary);sb.append(end);sb.append("Content-Disposition:form-data;name=\""+ entry.getKey()+ "\";filename=\""+ entry.getValue().substring(entry.getValue().lastIndexOf('/') + 1) + "\""+ end);sb.append("Content-Type:application/octet-stream;Charset=UTF-8"+ end + end);ds.write(sb.toString().getBytes());/* 取得文件的FileInputStream */fStream = new FileInputStream(entry.getValue());/* 设置每次写入1024bytes */int bufferSize = 1024;byte[] buffer = newbyte[bufferSize];int size = 0;int length = 0;/* 从文件读取数据至缓冲区 */while ((length = fStream.read(buffer)) != -1) {/* 将资料写入DataOutputStream中 */ds.write(buffer, 0, length);size = size + length;}sb = new StringBuilder();sb.append(end);ds.write(sb.toString().getBytes());fStream.close();}//表单结束标志sb.append(prefix);sb.append(boundary);sb.append(prefix);sb.append(end);ds.write(sb.toString().getBytes());/* close streams */ds.flush();//// /* 取得Response内容 */int res=con.getResponseCode();if(res!=200){//由后台程序提交LogService.getInstance().recordLog("存入数据库的提交地址为:"+posturl+" \n提交的数据为:"+JSonUtil.tojson(postparam)+" \n附件:"+JSonUtil.tojson(postfile));putTODB(posturl, postparam,postfile, type);// adapter.close();ds.close();con.disconnect();return 1;}else{if(!type.equals("0")){//编码String s ="";InputStreamReader isr =new InputStreamReader(con.getInputStream(),"UTF-8");int i ;while((i=isr.read())!=-1){s=s+(char)i;}String result =ParseResponseMessage.Parse(s);ds.close();con.disconnect();if(result.equals("0")){//提交成功return 0;}else{//服务端提交没有成功return -1;}}else{//不编码方式return 10;}}}catch(SocketTimeoutException cone){//网络连接超时putTODB(posturl, postparam,postfile, type);return -2;}catch (Exception e) {return -1;}}privatestaticvoid showDialog(String mess){new AlertDialog.Builder(context).setTitle("来自服务器的消息").setMessage(mess).setNegativeButton("确定",new DialogInterface.OnClickListener() {publicvoid onClick(DialogInterface dialog, int which){}}).show();}/***向服务器发送请求,如果发送不成功,将会自动存入到数据库中,由线程在后台自动提交*@param posturl要提交数据的url地址,如http://192.168.31.15:8080/TDDemonstration/eventAction.do?method=addEv ent*@param postparam要提交的form中的参数(名值对)*@param postfile要提交的form中的文件参数(form中控件名,上传的文件路径全名名值对)*@param type暂时设置为"1",为保证紧急消息最先执行数值越大表示越紧急;(0为向蒋勇的工程提交)*@return0数据发送成功1数据发送不成功,由后台线程去自动提交-1提交出现异常*/publicstaticsynchronizedint Post(String posturl,Map<String,String> postparam,Map<String,String> postfile,String type){//检查网络状态if(!WorkIsOK){putTODB(posturl, postparam,postfile,type);return 2;}else{if(postfile==null||postfile.isEmpty()){//不带附件return postNotWithFile(posturl, postparam,postfile,type);}else{//带有附件return PostWithFile(posturl, postparam, postfile,type);}}}privatestaticint postNotWithFile(String posturl,Map<String, String> postparam, Map<String, String>postfile,String type) {DefaultHttpClient httpClient =new DefaultHttpClient(httpParams);HttpPost httpRequest = new HttpPost(posturl);List<NameValuePair> localparams =new ArrayList<NameValuePair>();for (Map.Entry<String,String> entry : postparam.entrySet()) {if(type.equals("0")){//不编码localparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}else{//编码localparams.add(new BasicNameValuePair(entry.getKey(), StringUtil.StringToHex(entry.getValue())));}}try {httpRequest.setEntity((HttpEntity) new UrlEncodedFormEntity(localparams, HTTP.UTF_8));HttpResponse httpResponse = httpClient.execute(httpRequest);// 发送不成功,存入数据库中if (httpResponse.getStatusLine().getStatusCode() != 200) { LogService.getInstance().recordLog("存入数据库的提交地址为:"+posturl+" \n提交的数据为:"+JSonUtil.tojson(postparam)+" \n附件:"+JSonUtil.tojson(postfile));putTODB(posturl, postparam,postfile, type);// adapter.close();return 1;} else {//解析返回的字符串编码if(!type.equals("0")){//编码Stringresult=EntityUtils.toString(httpResponse.getEntity());result =ParseResponseMessage.Parse(result);if(result.equals("0")){//提交成功return 0;}else{//服务端提交没有成功return -1;}}else{//不编码String result=EntityUtils.toString(httpResponse.getEntity());// showDialog(result);return 10;}}}catch(SocketTimeoutException cone){//网络连接超时putTODB(posturl, postparam,postfile, type);return -2;}catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return -1;}}privatestaticvoid putTODB(Stringposturl,Map<String,String>postparam,Map<String,String>postfile,String type) {PostURL aposturl = new PostURL();if(type==null||type.equals("")){type="0";}aposturl.setData_type(type);aposturl.setExecute_status(0);aposturl.setPosturl(posturl);aposturl.setParams(postparam);aposturl.setFiles(postfile);aposturl.prepare();adapter.insert(aposturl);}private PostURL[] getData(){return adapter.QueryData("execute_status != 1", "data_type"); // return adapter.QueryData("", "data_type");}publicvoid run(){while(true){//检测网络状态是否可用if(WorkIsOK ==true){//检查是否有数据需要发送//取出数据posturls =getData();if(posturls!=null){for(int i=0;i<posturls.length;i++){PostURL vo =posturls[i];//将参数恢复成Mapvo.resume();if(vo.getFiles()!=null&&!vo.getFiles().isEmpty()){//有附件String end = "\r\n";String prefix = "--";String boundary = "*****";try {URL url = new URL(vo.getPosturl());HttpURLConnection con = (HttpURLConnection) url.openConnection();StringBuilder sb = new StringBuilder();FileInputStream fStream=null;/* 允许Input、Output,不使用Cache */ con.setConnectTimeout(SysConfig.nConnectionTimeout);con.setReadTimeout(SysConfig.readFileTimeout);con.setDoInput(true);con.setDoOutput(true);con.setUseCaches(false);/* 设置传送的method=POST */con.setRequestMethod("POST");/* setRequestProperty */con.setRequestProperty("Connection", "keep-alive");con.setRequestProperty("Charset","UTF-8");con.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);// // 拼接参数(不包括文件)List<NameValuePair>localparams =new ArrayList<NameValuePair>();for (Map.Entry<String,String> entry :vo.getParams().entrySet()) {sb.append(prefix);sb.append(boundary);sb.append(end);sb.append("Content-Disposition:form-data;name=\"" + entry.getKey()+"\""+end+"Content-Type:text/plain;Charset=UTF-8"+end );if(vo.getData_type().equals("0")){//不编码sb.append("Content-Transfer-Encoding:8bit"+end+end+entry.getValue() + end);}else{//编码sb.append("Content-Transfer-Encoding:8bit"+end+end+((entry.getValue()==null||entry.getValue().equals(""))?StringUtil.Str ingToHex(""):StringUtil.StringToHex(entry.getValue())) + end);}}// /* 设置DataOutputStream */DataOutputStream ds =new DataOutputStream(con.getOutputStream());String t=sb.toString();ds.write(sb.toString().getBytes());//发送文件for (Map.Entry<String, String> entry : vo.getFiles().entrySet()) {sb = new StringBuilder();sb.append(prefix);sb.append(boundary);sb.append(end);sb.append("Content-Disposition:form-data;name=\""+ entry.getKey()+ "\";filename=\""+ entry.getValue().substring(entry.getValue().lastIndexOf('/') + 1) + "\""+ end);sb.append("Content-Type:application/octet-stream;Charset=UTF-8"+ end + end);ds.write(sb.toString().getBytes());/* 取得文件的FileInputStream */fStream =new FileInputStream(entry.getValue());/* 设置每次写入1024bytes */int bufferSize = 1024;byte[] buffer = newbyte[bufferSize];int size = 0;int length = 0;/* 从文件读取数据至缓冲区 */while ((length =fStream.read(buffer)) != -1) {/* 将资料写入DataOutputStream中 */ds.write(buffer, 0, length);size = size + length;}sb = new StringBuilder();sb.append(end);fStream.close();}//表单结束标志sb.append(prefix);sb.append(boundary);sb.append(prefix);sb.append(end);ds.write(sb.toString().getBytes());/* close streams */ds.flush();//// /* 取得Response内容 */int res=con.getResponseCode();if(res!=200){//不成功vo.setExecute_status(-1);adapter.updateOneData(vo.getId(), vo);ds.close();con.disconnect();}else{adapter.deleteOneData(vo.getId());ds.close();con.disconnect();}}catch(SocketTimeoutException cone){//网络连接超时}catch (Exception e) {//提交的表单有问题,为不让线程一直跑无效的数据,把该条记录删除adapter.deleteOneData(vo.getId());e.printStackTrace();}}else{//没有附件httpClient =new DefaultHttpClient(httpParams);httpRequest = new HttpPost(vo.getPosturl());List<NameValuePair> localparams =new ArrayList<NameValuePair>();for (Map.Entry<String,String> entry :vo.getParams().entrySet()) {if(vo.getData_type().equals("0")){//不编码localparams.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));}else{//编码localparams.add(new BasicNameValuePair(entry.getKey(), StringUtil.StringToHex(entry.getValue())));}}try {httpRequest.setEntity((HttpEntity)new UrlEncodedFormEntity(localparams,HTTP.ISO_8859_1));HttpResponse httpResponse =httpClient.execute(httpRequest);// 发送不成功,存入数据库中if(httpResponse.getStatusLine().getStatusCode() != 200) {vo.setExecute_status(-1);adapter.updateOneData(vo.getId(), vo);} else {adapter.deleteOneData(vo.getId());}}catch(SocketTimeoutException cone){//网络连接超时}catch (Exception e) {// TODO Auto-generated catch blockadapter.deleteOneData(vo.getId());e.printStackTrace();}}}}else{//检查主应用程序是否退出了if(SysConfig.isActivety!=true){//线程结束发送数据,关闭数据库adapter.close();break;}else{try {Thread.sleep(SysConfig.PostTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}else{try {Thread.sleep(SysConfig.PostTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}8.Reader工具publicclass IniReader {private HashMap<String, String> sections = newHashMap();public IniReader(String filename) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(filename), "UTF-8"));read(reader);reader.close();}privatevoid read(BufferedReader reader) throws IOException { String line;while ((line = reader.readLine()) != null) {parseLine(line);}}privatevoid parseLine(String line) {if (line.matches(".*=.*")) {int i = line.indexOf('=');String name = line.substring(0, i);String value = line.substring(i + 1);name = name.trim();value = value.trim();sections.put(name, value);}}public String getValue(String name, String defalut) {String value = (String) sections.get(name);if (value == null) {return defalut;}return value;}}9.Android数据库DBOpenhelper(数据库建在指定路径下)1.DBopenhelperpackage nci.dsp.db;import nci.dsp.config.SysConfig;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;public class DBOpenHelper extends SDSQLiteOpenHelper{private static final String DB_NAME =SysConfig.db_dictory;private static final String DB_POSTURL_TABLE ="posturl";private static final int DB_VERSION =1;private static final String DB_POSTURL_CREATE ="create table posturl (_id integer primary key autoincrement,data_type text,posturl text,params text,files text,execute_status integer);";private static final String DB_FAVOR_ADDRESS_CREATE ="create table favoraddress(_id integer primary key autoincrement,x text,y text,addressname text);";private static final String DB_COMMANDTEMPLET_CREATE ="create table commandtemplet (_id integer primary key autoincrement,made_time text,templet_content_whole text,used_count integer,type integer);";//命令表/*** (_id integer primary key autoincrement,主键* command_id text, 服务器上的命令id号(本地拟制的命令不填写)* establish_time text, 命令拟制时间* command_establish_man_id text, 命令拟制人ID* command_establish_man_name text,命令拟制人姓名* command_establish_man_depart text, 命令拟制人部门* command_establish_man_phone text, 命令拟制人电话* command_receiver_man text,命令接收人(linkeman_id - type)* command_content text,命令内容* attach text, 附件地址(接收到的文件存放到/sdcard/td_pda/command目录下,所有的文件统一以数字(存储时的时间)命名)* posx text,命令发送时的地址* posy text,命令发送时的地址* type integer)类型 0:本地拟制的命令 1:接收到的命令*/private static final String DB_COMMAND_CREATE ="create table command(_id integer primary key autoincrement,command_id text," + "establish_time text,command_establish_man_id text,command_establish_man_name text,command_establish_man_depart text," +"command_establish_man_phone text,command_receiver_man text,command_content text,attach text,posx text,posy text,type integer);";//任务反馈表/*** _id integer primary key autoincrement,主键* feedback_id text,命令反馈的ID* command_id text,命令的唯一标识(对应命令表的command_id)* feedback_time text,反馈时间* feedback_man_name text, 反馈人姓名(显示用,本地反馈时不填写)* feedback_man_id text,反馈人ID号(在友邻表中的neighbor_id,供从地图上查看友邻的反馈情况使用)* feedback_man_depart text,反馈人部门* feedback_man_phone text,反馈人电话* feedback_content text,反馈内容* attach text,附件地址(接收到的文件存放到/sdcard/td_pda/feedback 目录下,所有的文件统一以数字(存储时的时间)命名)* posx text,反馈时的位置* posy text,反馈时的位置* type integer 类型 0:本地填写的反馈 1:接收到的任务反馈*/private static final String DB_FEEDBACK_CREATE ="create table feedback(_id integer primary key autoincrement,feedback_id。

36个Android开发常用经典代码大全

36个Android开发常用经典代码大全

36个Android开发常⽤经典代码⼤全本⽂汇集36个Android开发常⽤经典代码⽚段,包括拨打电话、发送短信、唤醒屏幕并解锁、是否有⽹络连接、动态显⽰或者是隐藏软键盘等,希望对您有所帮助。

//36个Android开发常⽤代码⽚段//拨打电话public static void call(Context context, String phoneNumber) {context.startActivity( new Intent(Intent.ACTION_CALL, Uri.parse( "tel:" + phoneNumber)));}//跳转⾄拨号界⾯public static void callDial(Context context, String phoneNumber) {context.startActivity( new Intent(Intent.ACTION_DIAL, Uri.parse( "tel:" + phoneNumber)));}//发送短信public static void sendSms(Context context, String phoneNumber,String content) {Uri uri = Uri.parse( "smsto:"+ (TextUtils.isEmpty(phoneNumber) ? "" : phoneNumber));Intent intent = new Intent(Intent.ACTION_SENDTO, uri);intent.putExtra( "sms_body" , TextUtils.isEmpty(content) ? "" : content);context.startActivity(intent);}//唤醒屏幕并解锁public static void wakeUpAndUnlock(Context context){KeyguardManager km= (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);KeyguardManager.KeyguardLock kl = km.newKeyguardLock( "unLock" );//解锁kl.disableKeyguard();//获取电源管理器对象PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);//获取PowerManager.WakeLock对象,后⾯的参数|表⽰同时传⼊两个值,最后的是LogCat⾥⽤的TagPowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright" ); //点亮屏幕wl.acquire();//释放wl.release();}//需要添加权限<uses-permission android:name= "android.permission.WAKE_LOCK" /><uses-permission android:name= "android.permission.DISABLE_KEYGUARD" />//判断当前App处于前台还是后台状态public static boolean isApplicationBackground( final Context context) {ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);@SuppressWarnings ( "deprecation" )List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks( 1 ); if (!tasks.isEmpty()) {ComponentName topActivity = tasks.get( 0 ).topActivity;if (!topActivity.getPackageName().equals(context.getPackageName())) { return true ;}}return false ;}//需要添加权限&lt;uses-permissionandroid:name= "android.permission.GET_TASKS" />//判断当前⼿机是否处于锁屏(睡眠)状态public static boolean isSleeping(Context context) {KeyguardManager kgMgr = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);boolean isSleeping = kgMgr.inKeyguardRestrictedInputMode();return isSleeping;}//判断当前是否有⽹络连接public static boolean isOnline(Context context) {ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Activity.CONNECTIVITY_SERVICE);NetworkInfo info = manager.getActiveNetworkInfo();if (info != null && info.isConnected()) {return true ;}return false ;}//判断当前是否是WIFI连接状态public static boolean isWifiConnected(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if (wifiNetworkInfo.isConnected()) {return true ;}return false ;}//安装APKpublic static void installApk(Context context, File file) {Intent intent = new Intent();intent.setAction( "android.intent.action.VIEW" );intent.addCategory( "android.intent.category.DEFAULT" );intent.setType( "application/vnd.android.package-archive" );intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive" );intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}//判断当前设备是否为⼿机public static boolean isPhone(Context context) {TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);if (telephony.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) { return false ;} else {return true ;}}//获取当前设备宽⾼,单位px@SuppressWarnings ( "deprecation" )public static int getDeviceWidth(Context context) {WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);return manager.getDefaultDisplay().getWidth();}@SuppressWarnings ( "deprecation" )public static int getDeviceHeight(Context context) {WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);return manager.getDefaultDisplay().getHeight();}//获取当前设备的IMEI,需要与上⾯的isPhone()⼀起使⽤@TargetApi (Build.VERSION_CODES.CUPCAKE)public static String getDeviceIMEI(Context context) {String deviceId;if (isPhone(context)) {TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);deviceId = telephony.getDeviceId();} else {deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);}return deviceId;}//获取当前设备的MAC地址public static String getMacAddress(Context context) {String macAddress;WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo();macAddress = info.getMacAddress();if ( null == macAddress) {return "" ;}macAddress = macAddress.replace( ":" , "" );return macAddress;}//获取当前程序的版本号public static String getAppVersion(Context context) {String version = "0" ;try {version = context.getPackageManager().getPackageInfo(context.getPackageName(), 0 ).versionName;} catch (NotFoundException e) {e.printStackTrace();}return version;}//收集设备信息,⽤于信息统计分析public static Properties collectDeviceInfo(Context context) {Properties mDeviceCrashInfo = new Properties();try {PackageManager pm = context.getPackageManager();PackageInfo pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES);if (pi != null ) {mDeviceCrashInfo.put(VERSION_NAME,pi.versionName == null ? "not set" : pi.versionName);mDeviceCrashInfo.put(VERSION_CODE, pi.versionCode);}} catch (NotFoundException e) {Log.e(TAG, "Error while collect package info" , e);}Field[] fields = Build. class .getDeclaredFields();for (Field field : fields) {try {field.setAccessible( true );mDeviceCrashInfo.put(field.getName(), field.get( null ));} catch (Exception e) {Log.e(TAG, "Error while collect crash info" , e);}}return mDeviceCrashInfo;}public static String collectDeviceInfoStr(Context context) {Properties prop = collectDeviceInfo(context);Set deviceInfos = prop.keySet();StringBuilder deviceInfoStr = new StringBuilder( "{\n" );for (Iterator iter = deviceInfos.iterator(); iter.hasNext();) {Object item = iter.next();deviceInfoStr.append( "\t\t\t" + item + ":" + prop.get(item)+ ", \n" );}deviceInfoStr.append( "}" );return deviceInfoStr.toString();}//是否有SD卡public static boolean haveSDCard() {return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);}//动态隐藏软键盘@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void hideSoftInput(Activity activity) {View view = activity.getWindow().peekDecorView();if (view != null ) {InputMethodManager inputmanger = (InputMethodManager) activity .getSystemService(Context.INPUT_METHOD_SERVICE);inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0 );}}@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void hideSoftInput(Context context, EditText edit) {edit.clearFocus();InputMethodManager inputmanger = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputmanger.hideSoftInputFromWindow(edit.getWindowToken(), 0 );}//动态显⽰软键盘@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void showSoftInput(Context context, EditText edit) {edit.setFocusable( true );edit.setFocusableInTouchMode( true );edit.requestFocus();InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputManager.showSoftInput(edit, 0 );}//动态显⽰或者是隐藏软键盘@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void toggleSoftInput(Context context, EditText edit) {edit.setFocusable( true );edit.setFocusableInTouchMode( true );edit.requestFocus();InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0 ); }//主动回到Home,后台运⾏public static void goHome(Context context) {Intent mHomeIntent = new Intent(Intent.ACTION_MAIN);mHomeIntent.addCategory(Intent.CATEGORY_HOME);mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);context.startActivity(mHomeIntent);}//获取状态栏⾼度//注意,要在onWindowFocusChanged中调⽤,在onCreate中获取⾼度为0@TargetApi (Build.VERSION_CODES.CUPCAKE)public static int getStatusBarHeight(Activity activity) {Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);return frame.top;}//获取状态栏⾼度+标题栏(ActionBar)⾼度//(注意,如果没有ActionBar,那么获取的⾼度将和上⾯的是⼀样的,只有状态栏的⾼度)public static int getTopBarHeight(Activity activity) {return activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();}//获取MCC+MNC代码 (SIM卡运营商国家代码和运营商⽹络代码)//仅当⽤户已在⽹络注册时有效, CDMA 可能会⽆效(中国移动:46000 //46002, 中国联通:46001,中国电信:46003)public static String getNetworkOperator(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getNetworkOperator();}//返回移动⽹络运营商的名字//(例:中国联通、中国移动、中国电信) 仅当⽤户已在⽹络注册时有效, //CDMA 可能会⽆效)public static String getNetworkOperatorName(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getNetworkOperatorName();}//返回移动终端类型PHONE_TYPE_NONE :0 ⼿机制式未知PHONE_TYPE_GSM :1 ⼿机制式为GSM,移动和联通PHONE_TYPE_CDMA :2 ⼿机制式为CDMA,电信PHONE_TYPE_SIP:3public static int getPhoneType(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getPhoneType();}//判断⼿机连接的⽹络类型(2G,3G,4G)//联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDOpublic class Constants {/*** Unknown network class*/public static final int NETWORK_CLASS_UNKNOWN = 0 ;/*** wifi net work*/public static final int NETWORK_WIFI = 1 ;/*** "2G" networks*/public static final int NETWORK_CLASS_2_G = 2 ;/*** "3G" networks*/public static final int NETWORK_CLASS_3_G = 3 ;/*** "4G" networks*/public static final int NETWORK_CLASS_4_G = 4 ;}public static int getNetWorkClass(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);switch (telephonyManager.getNetworkType()) {case WORK_TYPE_GPRS:case WORK_TYPE_EDGE:case WORK_TYPE_CDMA:case WORK_TYPE_1xRTT:case WORK_TYPE_IDEN:return WORK_CLASS_2_G;case WORK_TYPE_UMTS:case WORK_TYPE_EVDO_0:case WORK_TYPE_EVDO_A:case WORK_TYPE_HSDPA:case WORK_TYPE_HSUPA:case WORK_TYPE_HSPA:case WORK_TYPE_EVDO_B:case WORK_TYPE_EHRPD:case WORK_TYPE_HSPAP:return WORK_CLASS_3_G;case WORK_TYPE_LTE:return WORK_CLASS_4_G;default :return WORK_CLASS_UNKNOWN;}}//判断当前⼿机的⽹络类型(WIFI还是2,3,4G)//需要⽤到上⾯的⽅法public static int getNetWorkStatus(Context context) {int netWorkType = WORK_CLASS_UNKNOWN;ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if (networkInfo != null && networkInfo.isConnected()) {int type = networkInfo.getType();if (type == ConnectivityManager.TYPE_WIFI) {netWorkType = WORK_WIFI;} else if (type == ConnectivityManager.TYPE_MOBILE) {netWorkType = getNetWorkClass(context);}}return netWorkType;}//px-dp转换public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return ( int ) (dpValue * scale + 0 .5f);}public static int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return ( int ) (pxValue / scale + 0 .5f);}//px-sp转换public static int px2sp(Context context, float pxValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return ( int ) (pxValue / fontScale + 0 .5f);}public static int sp2px(Context context, float spValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return ( int ) (spValue * fontScale + 0 .5f);}//把⼀个毫秒数转化成时间字符串//格式为⼩时/分/秒/毫秒(如:24903600 –> 06⼩时55分03秒600毫秒)/*** @param millis* 要转化的毫秒数。

免费文档_android listview实现快速查询A—Z

免费文档_android listview实现快速查询A—Z

这个应用很酷吧,可以很方面我们找到所要的城市及实现天气查询订阅等.但是我要在这里提一下搜狐的意见了,这个错误很明显,城市J开头的你却用I来提示,而J你pass掉了,看来还是网易比较好.不东扯西扯了.首先我们要实现右边提示的view,这里面我们要自定义,这里是参考别人的.代码片段:1.2.public class MySideBar extends View {3.4.private TextView textView;// 显示框5.6.private boolean showBkg = false;7.// 触摸事件8.OnTouchingLetterChangedListener onTouchingLetterChangedListener;9.// 26个字母10.public static String[] b = { "#", "A", "B", "C", "D", "E", "F", "G", "H",11."I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",12."V", "W", "X", "Y", "Z" };13.int choose = -1;// 选中14.Paint paint = new Paint();15.16.// 自定义view 最好注明这三个构造函数17.public MySideBar(Context context, AttributeSet attrs, int defStyle) {18.super(context, attrs, defStyle);19.}20.21.public MySideBar(Context context, AttributeSet attrs) {22.super(context, attrs);23.}24.25.public MySideBar(Context context) {26.super(context);27.}28.29./**30.* 重写这个方法31.*/32.protected void onDraw(Canvas canvas) {33.super.onDraw(canvas);34.// 获取焦点改变背景颜色.35.if (showBkg) {36.canvas.drawColor(Color.parseColor("#40000000"));37.}38.int height = getHeight()-30;// 获取对应高度39.int width = getWidth(); // 获取对应宽度40.int singleHeight = height / b.length;// 获取每一个字母的高度41.42.for (int i = 0; i < b.length; i++) {43.paint.setColor(Color.BLACK);44.// paint.setColor(Color.WHITE);45.paint.setTypeface(Typeface.DEFAULT_BOLD);46.paint.setAntiAlias(true);47.paint.setTextSize(20);48.// 选中的状态49.if (i == choose) {50.paint.setColor(Color.parseColor("#3399ff"));51.paint.setFakeBoldText(true);52.}53.// x坐标等于中间-字符串宽度的一半.54.float xPos = width / 2 - paint.measureText(b[i]) / 2;55.float yPos = singleHeight * i + singleHeight;56.canvas.drawText(b[i], xPos, yPos, paint);57.paint.reset();// 重置画笔58.}59.60.}61.62.@Override63.public boolean dispatchTouchEvent(MotionEvent event) {64.final int action = event.getAction();65.final float y = event.getY();// 点击y坐标66.final int oldChoose = choose;67.final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;68.final int c = (int) (y / getHeight() * b.length);// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数.69.70.switch (action) {71.case MotionEvent.ACTION_DOWN:72.showBkg = true;73.if (oldChoose != c && listener != null) {74.if (c > 0 && c < b.length) {75.76.listener.onTouchingLetterChanged(b[c]);// 执行onTouchingLetterChanged事件.77.choose = c;// 选项78.invalidate();// 刷新79.}81.82.break;83.case MotionEvent.ACTION_MOVE:84.if (oldChoose != c && listener != null) {85.if (c > 0 && c < b.length) {86.listener.onTouchingLetterChanged(b[c]);87.choose = c;88.invalidate();89.}90.}91.break;92.case MotionEvent.ACTION_UP:93.showBkg = false;94.choose = -1;//95.invalidate();96.textView.setVisibility(View.GONE);97.break;98.}99.return true;100.}101.102.public void setTextView(TextView textView) {103.this.textView = textView;104.}105.106./**107.* 向外公开的方法108.*109.* @param onTouchingLetterChangedListener110.*/111.public void setOnTouchingLetterChangedListener(112.OnTouchingLetterChangedListener onTouchingLetterChangedListener) { 113.this.onTouchingLetterChangedListener = onTouchingLetterChangedListener; 114.}115.116./**117.* 接口118.*119.* @author coder120.*121.*/122.public interface OnTouchingLetterChangedListener {123.public void onTouchingLetterChanged(String s);125.126.}127.128.复制代码注释很详细,我想大家一看就OK了.下面我们要实现主页面的内容.看到这个样式,我郁闷好久,用什么来实现呢,之前做过这个.android 解决ScrollView与ListView的冲突(TableLayout+ScrollView) 。

Android源码编译命令详解(一)

Android源码编译命令详解(一)

Android源码编译命令详解(⼀)Android的优势就在于其开源,⼿机和平板⽣产商可以根据⾃⼰的硬件进⾏个性定制⾃⼰的⼿机产品,如⼩⽶,LePhone,M9等,因此,在我们在对Android的源码进⾏定制的时候,很有必要了解下,Android的编译过程。

如果你从来没有做过Android代码的编译,那么最官⽅的编译过程就是查看Android的官⽅⽹站:但是,这⼉只是告诉你了如何去编译⼀个通⽤的系统,并没有详细告诉你细节,我们跟着编译过程来了解下。

+--------------------------------------------------------------------------------------------------------------------+本⽂使⽤Android版本为2.1,采⽤开发板为华清远见研发的FS_S5PC100 A8开发板。

+--------------------------------------------------------------------------------------------------------------------+1. source build/envsetup.sh这个命令是⽤来将envsetup.sh⾥的所有⽤到的命令加载到环境变量⾥去,我们来分析下它。

envsetup.sh⾥的主要命令如下:[plain] function help() # 显⽰帮助信息function get_abs_build_var() # 获取绝对变量function get_build_var() # 获取绝对变量function check_product() # 检查productfunction check_variant() # 检查变量function setpaths() # 设置⽂件路径function printconfig() # 打印配置function set_stuff_for_environment() # 设置环境变量function set_sequence_number() # 设置序号function settitle() # 设置标题function choosetype() # 设置typefunction chooseproduct() # 设置productfunction choosevariant() # 设置variantfunction tapas() # 功能同choosecombofunction choosecombo() # 设置编译参数function add_lunch_combo() # 添加lunch项⽬function print_lunch_menu() # 打印lunch列表function lunch() # 配置lunchfunction m() # make from topfunction findmakefile() # 查找makefilefunction mm() # make from current directoryfunction mmm() # make the supplied directoriesfunction croot() # 回到根⽬录function cproj()function pid()function systemstack()function gdbclient()function jgrep() # 查找java⽂件function cgrep() # 查找c/cpp⽂件function resgrep()function tracedmdump()function runhat()function getbugreports()function startviewserver()function stopviewserver()function isviewserverstarted()function smoketest()function runtest()function godir () # 跳到指定⽬录# 这是系统⾃动增加了⼀个默认的编译项 generic-eng# add the default one here<strong><span style="color:#ff0000;">add_lunch_combo generic-eng</span></strong># 下⾯的代码很重要,它要从vendor⽬录下查找vendorsetup.sh⽂件,如果查到了,就加载它# Execute the contents of any vendorsetup.sh files we can find.<strong><span style="color:#ff0000;">for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null`doecho "including $f". $fdone</span></strong>function help() # 显⽰帮助信息function get_abs_build_var() # 获取绝对变量function get_build_var() # 获取绝对变量function check_product() # 检查productfunction check_variant() # 检查变量function setpaths() # 设置⽂件路径function printconfig() # 打印配置function set_stuff_for_environment() # 设置环境变量function set_sequence_number() # 设置序号function settitle() # 设置标题function choosetype() # 设置typefunction chooseproduct() # 设置productfunction choosevariant() # 设置variantfunction tapas() # 功能同choosecombofunction choosecombo() # 设置编译参数function add_lunch_combo() # 添加lunch项⽬function print_lunch_menu() # 打印lunch列表function lunch() # 配置lunchfunction m() # make from topfunction findmakefile() # 查找makefilefunction mm() # make from current directoryfunction mmm() # make the supplied directoriesfunction croot() # 回到根⽬录function cproj()function pid()function systemstack()function gdbclient()function jgrep() # 查找java⽂件function cgrep() # 查找c/cpp⽂件function resgrep()function tracedmdump()function runhat()function getbugreports()function startviewserver()function stopviewserver()function isviewserverstarted()function smoketest()function runtest()function godir () # 跳到指定⽬录# 这是系统⾃动增加了⼀个默认的编译项 generic-eng# add the default one here<strong><span style="color:#ff0000;">add_lunch_combo generic-eng</span></strong># 下⾯的代码很重要,它要从vendor⽬录下查找vendorsetup.sh⽂件,如果查到了,就加载它# Execute the contents of any vendorsetup.sh files we can find.<strong><span style="color:#ff0000;">for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null`doecho "including $f". $fdone</span></strong>根据上⾯的内容,可以推测出,如果要想定义⾃⼰的产品编译项,简单的办法是直接在envsetup.sh最后,添加上add_lunch_combo myProduct-eng,当然这么做,不太符合上⾯代码最后的本意,我们还是⽼实的在vendor⽬录下创建⾃⼰公司名字,然后在公司⽬录下创建⼀个新的vendorsetup.sh,在⾥⾯添加上⾃⼰的产品编译项[plain] #mkdir vendor/farsight/#touch vendor/farsight/vendorsetup.sh#echo "add_lunch_combo fs100-eng" > vendor/farsight/vendorsetup.sh#mkdir vendor/farsight/#touch vendor/farsight/vendorsetup.sh#echo "add_lunch_combo fs100-eng" > vendor/farsight/vendorsetup.sh这样,当我们在执⾏source build/envsetup.sh命令的时候,可以在shell上看到下⾯的信息:[plain] including vendor/farsight/vendorsetup.shincluding vendor/farsight/vendorsetup.sh2. 按照android官⽹的步骤,开始执⾏lunch full-eng当然如果你按上述命令执⾏,它编译的还是通⽤的eng版本系统,不是我们个性系统,我们可以执⾏lunch命令,它会打印出⼀个选择菜单,列出可⽤的编译选项如果你按照第⼀步中添加了vendorsetup.sh那么,你的选项中会出现:[plain] You're building on Linuxgeneric-eng simulator fs100-engLunch menu... pick a combo:1. generic-eng2. simulator3. fs100-engYou're building on Linuxgeneric-eng simulator fs100-engLunch menu... pick a combo:1. generic-eng2. simulator3. fs100-eng其中第3项是我们⾃⼰添加的编译项。

Android源码编译命令详解(二)

Android源码编译命令详解(二)

Android源码编译命令详解(⼆)通过上篇⽂章,我们分析了编译android时source build/envsetup.sh和lunch命令,在执⾏完上述两个命令后,我们就可以进⾏编译android 了。

1. make执⾏make命令的结果就是去执⾏当前⽬录下的Makefile⽂件,我们来看下它的内容:[html] 1 ### DO NOT EDIT THIS FILE ###2 include build/core/main.mk3 ### DO NOT EDIT THIS FILE ###1 ### DO NOT EDIT THIS FILE ###2 include build/core/main.mk3 ### DO NOT EDIT THIS FILE ###呵呵,看到上⾯的内容,我们都会笑,这是我见过最简单的Makefile了,我们再看下build/core/main.mk在main.mk⾥,定义了变量TOPDIR,TOP为当前⽬录,BUILD_SYSTEM为build/core⽬录。

在49⾏,包含了build/core/config.mk⽂件。

后⾯的代码是check环境变量,所有的Makefile都通过build/core/main.mk这个⽂件组织在⼀起,它定义了⼀个默认goals:droid,当我们在TOP⽬录下,敲Make实际上就等同于我们执⾏make droid。

当Make include所有的⽂件,完成对所有make我⽂件的解析以后就会寻找⽣成droid的规则,依次⽣成它的依赖,直到所有满⾜的模块被编译好,然后使⽤相应的⼯具打包成相应的img。

这⼉不是我们的重点,不再多说。

2. build/core/config.mk该⽂件被main.mk包含。

定义了以下环境变量:[plain] 16 SRC_HEADERS := \17 $(TOPDIR)system/core/include \18 $(TOPDIR)hardware/libhardware/include \19 $(TOPDIR)hardware/libhardware_legacy/include \20 $(TOPDIR)hardware/ril/include \21 $(TOPDIR)dalvik/libnativehelper/include \22 $(TOPDIR)frameworks/base/include \23 $(TOPDIR)frameworks/base/opengl/include \24 $(TOPDIR)external/skia/include25 SRC_HOST_HEADERS:=$(TOPDIR)tools/include26 SRC_LIBRARIES:= $(TOPDIR)libs27 SRC_SERVERS:= $(TOPDIR)servers28 SRC_TARGET_DIR := $(TOPDIR)build/target29 SRC_API_DIR := $(TOPDIR)frameworks/base/api16 SRC_HEADERS := \17 $(TOPDIR)system/core/include \18 $(TOPDIR)hardware/libhardware/include \19 $(TOPDIR)hardware/libhardware_legacy/include \20 $(TOPDIR)hardware/ril/include \21 $(TOPDIR)dalvik/libnativehelper/include \22 $(TOPDIR)frameworks/base/include \23 $(TOPDIR)frameworks/base/opengl/include \24 $(TOPDIR)external/skia/include25 SRC_HOST_HEADERS:=$(TOPDIR)tools/include26 SRC_LIBRARIES:= $(TOPDIR)libs27 SRC_SERVERS:= $(TOPDIR)servers28 SRC_TARGET_DIR := $(TOPDIR)build/target.....然后定义了下⾯⼏个重要的编译命令[plain] 43 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk44 BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk45 BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk46 BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk47 BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk48 BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk49 BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk50 BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk51 BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk52 BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk53 BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk54 BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk55 BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk56 BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk57 BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk58 BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk59 BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk60 BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk61 BUILD_KEY_CHAR_MAP := $(BUILD_SYSTEM)/key_char_map.mk43 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk44 BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk45 BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk46 BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk47 BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk48 BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk49 BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk50 BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk51 BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk52 BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk53 BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk54 BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk55 BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk56 BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk57 BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk58 BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk59 BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk60 BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk61 BUILD_KEY_CHAR_MAP := $(BUILD_SYSTEM)/key_char_map.mk上述命令变量其实是对应的mk⽂件名,所有的Android.mk⽂件⾥基本上都包含上述命令变量,如:CLEAR_VARS:⽤来清除之前定义的环境变量BUILD_SHARED_LIBRARY:⽤来指定编译动态库过程[plain] 109 # ---------------------------------------------------------------110 # Define most of the global variables. These are the ones that111 # are specific to the user's build configuration.112 include $(BUILD_SYSTEM)/envsetup.mk113114 # Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)115 # or under vendor/*/$(TARGET_DEVICE). Search in both places, but116 # make sure only one exists.117 # Real boards should always be associated with an OEM vendor.118 board_config_mk := \119 $(strip $(wildcard \120 $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \121 vendor/*/$(TARGET_DEVICE)/BoardConfig.mk \122 ))123 ifeq ($(board_config_mk),)124 $(error No config file found for TARGET_DEVICE $(TARGET_DEVICE))125 endif126 ifneq ($(words $(board_config_mk)),1)127 $(error Multiple board config files for TARGET_DEVICE $(TARGET_DEVICE): $(board_config_mk)) 128 endif129 include $(board_config_mk)109 # ---------------------------------------------------------------110 # Define most of the global variables. These are the ones that111 # are specific to the user's build configuration.112 include $(BUILD_SYSTEM)/envsetup.mk113114 # Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)115 # or under vendor/*/$(TARGET_DEVICE). Search in both places, but116 # make sure only one exists.117 # Real boards should always be associated with an OEM vendor.118 board_config_mk := \119 $(strip $(wildcard \120 $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \121 vendor/*/$(TARGET_DEVICE)/BoardConfig.mk \122 ))123 ifeq ($(board_config_mk),)124 $(error No config file found for TARGET_DEVICE $(TARGET_DEVICE))125 endif126 ifneq ($(words $(board_config_mk)),1)127 $(error Multiple board config files for TARGET_DEVICE $(TARGET_DEVICE): $(board_config_mk))128 endif129 include $(board_config_mk)130 TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))131 board_config_mk :=112⾏⼜包含了另外⼀个重要的mk⽂件envsetup.mk,我们来看⼀下。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0 android 创建按钮Button button = new Button(this);1 android 创建输入框EditText editText = new EditText(this);2 android 创建文本TextView textView = new TextView(this);3 android 设置文本显示内容TextView textView = new TextView(this);textView.setText("hello world!");4 android 设置文本背景色TextView textView = new TextView(this);textView.setBackgroundColor(Color.YELLOW);5 android 设置文本颜色TextView textView = new TextView(this);textView.setTextColor(Color.YELLOW);6 android 设置文本文字大小TextView textView = new TextView(this);textView.setTextSize(18);7 android 设置输入框宽度EditText editText = new EditText(this);editText.setWidth(200);8 android 设置输入框为密码框EditText editText = new EditText(this);editText.setTransformationMethod( PasswordTransformationMethod.getInstance());9 android 设置输入框为密码框(xml配置)android:password="true"10 android 提示对话框的使用AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("你好");builder.setPositiveButton("OK",this);builder.show()需实现android.content.DialogInterface.OnClickListener接口11 android ListView的使用ListView listView = new ListView(this);ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); SimpleAdapter adapter = new SimpleAdapter(this,list,yout.list,new String[]{"标题"},new int[]{R.id.TextView01});listView.setAdapter(adapter);listView.setOnItemClickListener(this);然后实现OnItemClickListener接口public void onItemClick(AdapterView<?> parent, View view, int position, long id) {}12 android 更新ListViewListView listView = new ListView(this);ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); SimpleAdapter adapter = new SimpleAdapter(this,list,yout.list,new String[]{"标题"},new int[]{R.id.TextView01});listView.setAdapter(adapter);adapter.notifyDataSetChanged();//通知更新ListView13 android 创建LinearLayoutLinearLayout layoutParant = new LinearLayout(this);14 android 时间设置对话框的使用DatePickerDialog dlg = new DatePickerDialog(this,this,year,month,day);dlg.show();/*year month day 均为int型,第二个参数为this时,该类需要implements OnDateSetListener 并重写public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {}*/15 android 创建FrameLayoutFrameLayout layout = new FrameLayout(this);16 android 触发键盘事件layout.setOnKeyListener(this);//需要implements OnKeyListener并重写以下方法public boolean onKey(View v, int keyCode, KeyEvent event) {return false;//返回是否销毁该事件以接收新的事件,比如返回true按下时可以不断执行这个方法,返回false则执行一次。

}17 android 触发鼠标事件layout.OnTouchListener(this);//需要implements OnTouchListener并重写以下方法public boolean onTouch(View v, MotionEvent event) {return false;//返回是否销毁该事件以接收新的事件,比如返回true按下时可以不断执行这个方法,返回false则执行一次。

}18 android 获得屏幕宽度和高度int width = this.getWindow().getWindowManager().getDefaultDisplay().getWidth();int height =this.getWindow().getWindowManager().getDefaultDisplay().getHeight();19 android 布局添加控件LinearLayout layout = new LinearLayout(this);Button button = new Button(this);layout.addView(button);20 android intent实现activit之间跳转Intent intent = new Intent();intent.setClass(this, DestActivity.class);startActivity(intent);21 android intent设置actionIntent intent = new Intent();intent.setAction(intent.ACTION_DIAL);22 android intent设置dataIntent intent = new Intent();intent.setData(Uri.parse("tel:00000000"));23 android intent传数据Intent intent = new Intent();intent.putExtra("data", value);//value可以是很多种类型,在接收activity中取出后强制转换或调用相应类型的get函数。

24 android intent取数据String value = (String)getIntent().getExtras().get("data");//orString value = getIntent().getExtras().getString("data");25 android 利用paint和canvas画图setContentView(new MyView(this));class MyView extends View{public MyView(Context context){super(context);}public void onDraw(Canvas canvas){Paint paint = new Paint();//创建画笔paint.setColor(Color.BLUE);//设置画笔颜色canvas.drawRect(0, 0, 100, 100, paint);//画个正方形,坐标0,0,100,100。

}}26 android 新建对话框Dialog dialog = new Dialog(this);dialog.setTitle("test");//设置标题dialog.addContentView(button,new LayoutParams(-1,-1));//添加控件,-1是设置高度和宽度充满布局,-2是按照需要设置宽度高度。

dialog.show();27 android 取消对话框dialog.cancel();28对View类刷新显示view.invalidate();//通过这个调用view的onDraw()函数28 android 对View类刷新显示view.invalidate();//通过这个调用view的onDraw()函数29 android 使用SurfaceView画图setContentView(new MySurfaceView(this));class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{SurfaceHolder holder;public MySurfaceView(Context context){super(context);holder = getHolder();holder.addCallback(this);}class MyThread extends Thread{public void run(){ Canvas canvas = holder.lockCanvas(); Paint paint = new Paint();paint.setColor(Color.YELLOW); canvas.drawRect(100, 100, 200, 200, paint); holder.unlockCanvasAndPost(canvas);}}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}public void surfaceCreated(SurfaceHolder holder) {new MyThread().start();}public void surfaceDestroyed(SurfaceHolder holder) {}}30 android 获得控件findViewByIdTextView textView = (TextView) findViewById(R.id.TextView01);31 android 十六进制设置画笔颜色Paint paint = new Paint();paint.setColor(0xffffffff);//第一个ff是透明度的设置。

相关文档
最新文档