Android KEYCODE列表
//adb 模拟键盘按键
adb shell input keyevent 4
//在屏幕上做划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒)
adb shell input swipe 50 250 250 250 500
//在屏幕上点击坐标点x=50 y=250的位置。
adb shell input tap 50 250
//输入字符abc
adb shell input text abc
KEYCODE列表
电话键
KEYCODE_CALL | 拨号键 | 5 |
KEYCODE_ENDCALL | 挂机键 | 6 |
KEYCODE_HOME | 按键Home | 3 |
KEYCODE_MENU | 菜单键 | 82 |
KEYCODE_BACK | 返回键 | 4 |
KEYCODE_SEARCH | 搜索键 | 84 |
KEYCODE_CAMERA | 拍照键 | 27 |
KEYCODE_FOCUS | 拍照对焦键 | 80 |
KEYCODE_POWER | 电源键 | 26 |
KEYCODE_NOTIFICATION | 通知键 | 83 |
KEYCODE_MUTE | 话筒静音键 | 91 |
KEYCODE_VOLUME_MUTE | 扬声器静音键 | 164 |
KEYCODE_VOLUME_UP | 音量增加键 | 24 |
KEYCODE_VOLUME_DOWN | 音量减小键 | 25 |
控制键
KEYCODE_ENTER | 回车键 | 66 |
KEYCODE_ESCAPE | ESC键 | 111 |
KEYCODE_DPAD_CENTER | 导航键 确定键 | 23 |
KEYCODE_DPAD_UP | 导航键 向上 | 19 |
KEYCODE_DPAD_DOWN | 导航键 向下 | 20 |
KEYCODE_DPAD_LEFT | 导航键 向左 | 21 |
KEYCODE_DPAD_RIGHT | 导航键 向右 | 22 |
KEYCODE_MOVE_HOME | 光标移动到开始键 | 122 |
KEYCODE_MOVE_END | 光标移动到末尾键 | 123 |
KEYCODE_PAGE_UP | 向上翻页键 | 92 |
KEYCODE_PAGE_DOWN | 向下翻页键 | 93 |
KEYCODE_DEL | 退格键 | 67 |
KEYCODE_FORWARD_DEL | 删除键 | 112 |
KEYCODE_INSERT | 插入键 | 124 |
KEYCODE_TAB | Tab键 | 61 |
KEYCODE_NUM_LOCK | 小键盘锁 | 143 |
KEYCODE_CAPS_LOCK | 大写锁定键 | 115 |
KEYCODE_BREAK | Break/Pause键 | 121 |
KEYCODE_SCROLL_LOCK | 滚动锁定键 | 116 |
KEYCODE_ZOOM_IN | 放大键 | 168 |
KEYCODE_ZOOM_OUT | 缩小键 | 169 |
组合键
KEYCODE_ALT_LEFT | Alt+Left |
KEYCODE_ALT_RIGHT | Alt+Right |
KEYCODE_CTRL_LEFT | Control+Left |
KEYCODE_CTRL_RIGHT | Control+Right |
KEYCODE_SHIFT_LEFT | Shift+Left |
KEYCODE_SHIFT_RIGHT | Shift+Right |
基本
KEYCODE_0 | 按键’0′ | 7 |
KEYCODE_1 | 按键’1′ | 8 |
KEYCODE_2 | 按键’2′ | 9 |
KEYCODE_3 | 按键’3′ | 10 |
KEYCODE_4 | 按键’4′ | 11 |
KEYCODE_5 | 按键’5′ | 12 |
KEYCODE_6 | 按键’6′ | 13 |
KEYCODE_7 | 按键’7′ | 14 |
KEYCODE_8 | 按键’8′ | 15 |
KEYCODE_9 | 按键’9′ | 16 |
KEYCODE_A | 按键’A’ | 29 |
KEYCODE_B | 按键’B’ | 30 |
KEYCODE_C | 按键’C’ | 31 |
KEYCODE_D | 按键’D’ | 32 |
KEYCODE_E | 按键’E’ | 33 |
KEYCODE_F | 按键’F’ | 34 |
KEYCODE_G | 按键’G’ | 35 |
KEYCODE_H | 按键’H’ | 36 |
KEYCODE_I | 按键’I’ | 37 |
KEYCODE_J | 按键’J’ | 38 |
KEYCODE_K | 按键’K’ | 39 |
KEYCODE_L | 按键’L’ | 40 |
KEYCODE_M | 按键’M’ | 41 |
KEYCODE_N | 按键’N’ | 42 |
KEYCODE_O | 按键’O’ | 43 |
KEYCODE_P | 按键’P’ | 44 |
KEYCODE_Q | 按键’Q’ | 45 |
KEYCODE_R | 按键’R’ | 46 |
KEYCODE_S | 按键’S’ | 47 |
KEYCODE_T | 按键’T’ | 48 |
KEYCODE_U | 按键’U’ | 49 |
KEYCODE_V | 按键’V’ | 50 |
KEYCODE_W | 按键’W’ | 51 |
KEYCODE_X | 按键’X’ | 52 |
KEYCODE_Y | 按键’Y’ | 53 |
KEYCODE_Z | 按键’Z’ | 54 |
符号
KEYCODE_PLUS | 按键’+’ |
KEYCODE_MINUS | 按键’-‘ |
KEYCODE_STAR | 按键’*’ |
KEYCODE_SLASH | 按键’/’ |
KEYCODE_EQUALS | 按键’=’ |
KEYCODE_AT | 按键’@’ |
KEYCODE_POUND | 按键’#’ |
KEYCODE_APOSTROPHE | 按键”’ (单引号) |
KEYCODE_BACKSLASH | 按键’\’ |
KEYCODE_COMMA | 按键’,’ |
KEYCODE_PERIOD | 按键’.’ |
KEYCODE_LEFT_BRACKET | 按键'[‘ |
KEYCODE_RIGHT_BRACKET | 按键’]’ |
KEYCODE_SEMICOLON | 按键’;’ |
KEYCODE_GRAVE | 按键’`’ |
KEYCODE_SPACE | 空格键 |
小键盘
KEYCODE_NUMPAD_0 | 小键盘按键’0′ |
KEYCODE_NUMPAD_1 | 小键盘按键’1′ |
KEYCODE_NUMPAD_2 | 小键盘按键’2′ |
KEYCODE_NUMPAD_3 | 小键盘按键’3′ |
KEYCODE_NUMPAD_4 | 小键盘按键’4′ |
KEYCODE_NUMPAD_5 | 小键盘按键’5′ |
KEYCODE_NUMPAD_6 | 小键盘按键’6′ |
KEYCODE_NUMPAD_7 | 小键盘按键’7′ |
KEYCODE_NUMPAD_8 | 小键盘按键’8′ |
KEYCODE_NUMPAD_9 | 小键盘按键’9′ |
KEYCODE_NUMPAD_ADD | 小键盘按键’+’ |
KEYCODE_NUMPAD_SUBTRACT | 小键盘按键’-‘ |
KEYCODE_NUMPAD_MULTIPLY | 小键盘按键’*’ |
KEYCODE_NUMPAD_DIVIDE | 小键盘按键’/’ |
KEYCODE_NUMPAD_EQUALS | 小键盘按键’=’ |
KEYCODE_NUMPAD_COMMA | 小键盘按键’,’ |
KEYCODE_NUMPAD_DOT | 小键盘按键’.’ |
KEYCODE_NUMPAD_LEFT_PAREN | 小键盘按键'(‘ |
KEYCODE_NUMPAD_RIGHT_PAREN | 小键盘按键’)’ |
KEYCODE_NUMPAD_ENTER | 小键盘按键回车 |
功能键
KEYCODE_F1 | 按键F1 |
KEYCODE_F2 | 按键F2 |
KEYCODE_F3 | 按键F3 |
KEYCODE_F4 | 按键F4 |
KEYCODE_F5 | 按键F5 |
KEYCODE_F6 | 按键F6 |
KEYCODE_F7 | 按键F7 |
KEYCODE_F8 | 按键F8 |
KEYCODE_F9 | 按键F9 |
KEYCODE_F10 | 按键F10 |
KEYCODE_F11 | 按键F11 |
KEYCODE_F12 | 按键F12 |
多媒体键
KEYCODE_MEDIA_PLAY | 多媒体键 播放 |
KEYCODE_MEDIA_STOP | 多媒体键 停止 |
KEYCODE_MEDIA_PAUSE | 多媒体键 暂停 |
KEYCODE_MEDIA_PLAY_PAUSE | 多媒体键 播放/暂停 |
KEYCODE_MEDIA_FAST_FORWARD | 多媒体键 快进 |
KEYCODE_MEDIA_REWIND | 多媒体键 快退 |
KEYCODE_MEDIA_NEXT | 多媒体键 下一首 |
KEYCODE_MEDIA_PREVIOUS | 多媒体键 上一首 |
KEYCODE_MEDIA_CLOSE | 多媒体键 关闭 |
KEYCODE_MEDIA_EJECT | 多媒体键 弹出 |
KEYCODE_MEDIA_RECORD | 多媒体键 录音 |
手柄按键
KEYCODE_BUTTON_1 | 通用游戏手柄按钮#1 |
KEYCODE_BUTTON_2 | 通用游戏手柄按钮 #2 |
KEYCODE_BUTTON_3 | 通用游戏手柄按钮 #3 |
KEYCODE_BUTTON_4 | 通用游戏手柄按钮 #4 |
KEYCODE_BUTTON_5 | 通用游戏手柄按钮 #5 |
KEYCODE_BUTTON_6 | 通用游戏手柄按钮 #6 |
KEYCODE_BUTTON_7 | 通用游戏手柄按钮 #7 |
KEYCODE_BUTTON_8 | 通用游戏手柄按钮 #8 |
KEYCODE_BUTTON_9 | 通用游戏手柄按钮 #9 |
KEYCODE_BUTTON_10 | 通用游戏手柄按钮 #10 |
KEYCODE_BUTTON_11 | 通用游戏手柄按钮 #11 |
KEYCODE_BUTTON_12 | 通用游戏手柄按钮 #12 |
KEYCODE_BUTTON_13 | 通用游戏手柄按钮 #13 |
KEYCODE_BUTTON_14 | 通用游戏手柄按钮 #14 |
KEYCODE_BUTTON_15 | 通用游戏手柄按钮 #15 |
KEYCODE_BUTTON_16 | 通用游戏手柄按钮 #16 |
KEYCODE_BUTTON_A | 游戏手柄按钮 A |
KEYCODE_BUTTON_B | 游戏手柄按钮 B |
KEYCODE_BUTTON_C | 游戏手柄按钮 C |
KEYCODE_BUTTON_X | 游戏手柄按钮 X |
KEYCODE_BUTTON_Y | 游戏手柄按钮 Y |
KEYCODE_BUTTON_Z | 游戏手柄按钮 Z |
KEYCODE_BUTTON_L1 | 游戏手柄按钮 L1 |
KEYCODE_BUTTON_L2 | 游戏手柄按钮 L2 |
KEYCODE_BUTTON_R1 | 游戏手柄按钮 R1 |
KEYCODE_BUTTON_R2 | 游戏手柄按钮 R2 |
KEYCODE_BUTTON_MODE | 游戏手柄按钮 Mode |
KEYCODE_BUTTON_SELECT | 游戏手柄按钮 Select |
KEYCODE_BUTTON_START | 游戏手柄按钮 Start |
KEYCODE_BUTTON_THUMBL | Left Thumb Button |
KEYCODE_BUTTON_THUMBR | Right Thumb Button |
待查
KEYCODE_NUM | 按键Number modifier |
KEYCODE_INFO | 按键Info |
KEYCODE_APP_SWITCH | 按键App switch |
KEYCODE_BOOKMARK | 按键Bookmark |
KEYCODE_AVR_INPUT | 按键A/V Receiver input |
KEYCODE_AVR_POWER | 按键A/V Receiver power |
KEYCODE_CAPTIONS | 按键Toggle captions |
KEYCODE_CHANNEL_DOWN | 按键Channel down |
KEYCODE_CHANNEL_UP | 按键Channel up |
KEYCODE_CLEAR | 按键Clear |
KEYCODE_DVR | 按键DVR |
KEYCODE_ENVELOPE | 按键Envelope special function |
KEYCODE_EXPLORER | 按键Explorer special function |
KEYCODE_FORWARD | 按键Forward |
KEYCODE_FORWARD_DEL | 按键Forward Delete |
KEYCODE_FUNCTION | 按键Function modifier |
KEYCODE_GUIDE | 按键Guide |
KEYCODE_HEADSETHOOK | 按键Headset Hook |
KEYCODE_META_LEFT | 按键Left Meta modifier |
KEYCODE_META_RIGHT | 按键Right Meta modifier |
KEYCODE_PICTSYMBOLS | 按键Picture Symbols modifier |
KEYCODE_PROG_BLUE | 按键Blue “programmable” |
KEYCODE_PROG_GREEN | 按键Green “programmable” |
KEYCODE_PROG_RED | 按键Red “programmable” |
KEYCODE_PROG_YELLOW | 按键Yellow “programmable” |
KEYCODE_SETTINGS | 按键Settings |
KEYCODE_SOFT_LEFT | 按键Soft Left |
KEYCODE_SOFT_RIGHT | 按键Soft Right |
KEYCODE_STB_INPUT | 按键Set-top-box input |
KEYCODE_STB_POWER | 按键Set-top-box power |
KEYCODE_SWITCH_CHARSET | 按键Switch Charset modifier |
KEYCODE_SYM | 按键Symbol modifier |
KEYCODE_SYSRQ | 按键System Request / Print Screen |
KEYCODE_TV | 按键TV |
KEYCODE_TV_INPUT | 按键TV input |
KEYCODE_TV_POWER | 按键TV power |
KEYCODE_WINDOW | 按键Window |
KEYCODE_UNKNOWN | 未知按键 |
调用Android Wifi 设置的方法
不同系统不同版本的Android 的 wifi setting 的 Activity 不尽相同,下列方式应该可以用的,具体Activity 的 ClassName 要看机型和烧录的 Android ROM 。。。
Android 通过应用包名启动外部应用方式A
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings"); mIntent.setComponent(comp); startActivity(mIntent);
Android 通过应用包名启动外部应用方式B
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.Settings$WirelessSettingsActivity"); mIntent.setComponent(comp); startActivity(mIntent);
Android 通过应用包名启动外部应用方式C
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.wifi.WifiSettings"); mIntent.setComponent(comp); startActivity(mIntent);
Android 通过应用包名启动外部应用方式D
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName comp = new ComponentName("com.android.phone", "com.android.phone.NetworkSetting"); mIntent.setComponent(comp); startActivity(mIntent);
Android 通过应用包名启动外部应用方式E
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName comp = new ComponentName("com.android.phone", "com.android.phone.Settings"); mIntent.setComponent(comp); startActivity(mIntent);
广播Intent A
Intent i = new Intent("android.settings.WIRELESS_SETTINGS"); mContext.sendBroadcast(i);
广播Intent B
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
Android ADB 命令行控制屏幕
禁用自动旋转 adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0
启用自动旋转 adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:1
旋转屏幕 adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:1
旋转屏幕的值 可以为 0,1,2,3,对应四个方向
Pro Android 2. 笔记 – 2 名词定义
View
Views are user interface (UI) elements that form the basic building blocks of a user
interface. Views are hierarchical and they know how to draw themselves. A view could
be a button or a label or a text field, or lots of other UI elements. If you are familiar with
views in J2EE and Swing then you’ll understand views in Android.
Activity
An activity is a user interface concept. An activity usually represents a single screen in
your application. It generally contains one or more views, but it doesn’t have to.
Moreover, other concepts in Android could better represent a viewless activity (as you抣l
see in the service section shortly).
Intent
An intent generically defines an 搃ntention?to do some work. Intents encapsulate several
concepts, so the best approach to understanding them is to see examples of their use.
You can use intents to perform the following tasks:
.. Broadcast a message
.. Start a service
.. Launch an activity
.. Display a web page or a list of contacts
.. Dial a phone number or answer a phone call
Intents are not always initiated by your application they’re also used by the system to
notify your application of specific events (such as the arrival of a text message).
Intents can be explicit or implicit. If you simply say that you want to display a URL, the
system will decide what component will fulfill the intention. You can also provide specific
information about what should handle the intention. Intents loosely couple the action
and action handler.
Content Provider
Data sharing among mobile applications on a device is common. Therefore, Android
defines a standard mechanism for applications to share data (such as a list of contacts)
without exposing the underlying storage, structure, and implementation. Through
content providers, you can expose your data and have your applications use data from
other applications.
Service
Services in Android resemble services you see in Windows or other platforms梩hey抮e
background processes that can potentially run for a long time. Android defines two
types of services: local services and remote services. Local services are components
that are only accessible by the application that is hosting the service. Conversely,
remote services are services that are meant to be accessed remotely by other
applications running on the device.
An example of a service is a component that is used by an e-mail application to poll for
new messages. This kind of service might be a local service if the service is not used by
other applications running on the device. If several applications use the service, then it
would be implemented as a remote service. The difference, as you抣l see in Chapter 8, is
in startService() vs. bindService().
You can use existing services and also write your own services by extending the
Service class.
AndroidManifest.xml
AndroidManifest.xml, which is similar to the web.xml file in the J2EE world, defines the
contents and behavior of your application. For example, it lists your application
activities and services, along with the permissions the application needs to run.
Android Virtual Devices
An Android Virtual Device (AVD) allows developers to test their applications without
hooking up an actual Android phone. AVDs can be created in various configurations to
emulate different types of real phones.
Pro Android 2. 笔记
Dalvik 与 class files
These issues led Google to revisit the standard JVM implementation in many respects.
(The key figure in Google’s implementation of this JVM is Dan Bornstein, who wrote the
Dalvik VM—Dalvik is the name of a town in Iceland.) First, the Dalvik VM takes the
generated Java class files and combines them into one or more Dalvik Executable (.dex)
files. It reuses duplicate information from multiple class files, effectively reducing the
space requirement (uncompressed) by half from a traditional .jar file. For example, the
.dex file of the web browser app in Android is about 200K, whereas the equivalent
uncompressed .jar version is about 500K. The .dex file of the alarm clock app is about
50K, and roughly twice that size in its . jar version.
===========
Second, Google has fine-tuned the garbage collection in the Dalvik VM, but it has
chosen to omit a just-in-time (JIT) compiler, in early releases. The 2.0 codebase seem to
have the necessary sources for a JIT compiler but is not enabled in the final release
2.2 引入了JIT — 通过某种算法去收集和抽取那些最常用代码(或者是最符合算法需求的),把他们转化成native指令来提供执行效率。
==========
Finally, the Dalvik VM uses a different kind of assembly-code generation, in which it uses
registers as the primary units of data storage instead of the stack.
register一般指是CPU的一些存储器,不包括cache。stack是用于程序的函数保存临时变量的内存,如函数调用时保存某些寄存器的值和函数的临时变量(入栈),当函数结束时,将释放掉临时变量,恢复函数调用前的寄存器的值(出栈)。
========================================
This performance paranoia extends into the rest of the Android SDK. For example, the
Android SDK uses XML extensively to define UI layouts. However, all of this XML is
compiled to binary files before these binary files become resident on the devices
.class files -> .dex .xml -> binary files
========================================
Most of the application framework accesses these core libraries through the Dalvik VM,
the gateway to the Android Platform. As we indicated in the previous sections, Dalvik is
optimized to run multiple instances of VMs. As Java applications access these core
libraries, each application gets its own VM instance.
Android 与 XML
Android 里很多配置文件是存在 xml 里的,但是xml 描述信息的效率是非常低的。如果直接布署到移动设备上非常占资源。
其实把App在安装到移动设置上时。AAPT(Android Assert Packaging Tool) 会将 xml 转化成 二进制文件的形式存储。在移动设备上读取这些配置项的时候,也是从二进制文件里读取。此处应当是向上封装的。
Android 下定时触发 service
@Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub final AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE) ; long elapseTime = 60*1000l; Intent toWake = new Intent(this, PiggyService.class); final PendingIntent wakeupIntent = PendingIntent.getService(this, 0, toWake,0 ); am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+elapseTime, wakeupIntent); return START_NOT_STICKY; }
START_NOT_STICKY表示要求的系统优先级要低,允许系统回归该组件,只是定时触发唤醒而已。
同理还有START_STICKY 表示要求系统不回收该组件(如听歌组件等,回收会影响用户体验的服务)
START_REDELIVER_INTENT表示如果该组件在执行中被系统回收,在重新调用时会复原传入的Intent对象确保中间数据不会丢失。