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对象确保中间数据不会丢失。