Android applications simulate mobile phone buttons

Source: Internet
Author: User

Android applications simulate mobile phone buttons
I remember that when I was working on a C ++ project, I had to use the code to simulate the Enter effect on the keyboard after a certain step of operation. Out of curiosity, I have studied the key values, simulation methods, and final effects of various buttons on Android phones (or tablets) over the past few days. 1. Let's take a look at how keys and values are defined in Android:

  1 public static final int KEYCODE_UNKNOWN         = 0;  2 /** Key code constant: Soft Left key. */  3 public static final int KEYCODE_SOFT_LEFT       = 1;  4 /** Key code constant: Soft Right key. */  5 public static final int KEYCODE_SOFT_RIGHT      = 2;  6 /** Key code constant: Home key. */  7 public static final int KEYCODE_HOME            = 3;  8 /** Key code constant: Back key. */  9 public static final int KEYCODE_BACK            = 4; 10 /** Key code constant: Call key. */ 11 public static final int KEYCODE_CALL            = 5; 12 /** Key code constant: End Call key. */ 13 public static final int KEYCODE_ENDCALL         = 6; 14 /** Key code constant: '0' key. */ 15 public static final int KEYCODE_0               = 7; 16 /** Key code constant: '1' key. */ 17 public static final int KEYCODE_1               = 8; 18 /** Key code constant: '2' key. */ 19 public static final int KEYCODE_2               = 9; 20 /** Key code constant: '3' key. */ 21 public static final int KEYCODE_3               = 10; 22 /** Key code constant: '4' key. */ 23 public static final int KEYCODE_4               = 11; 24 /** Key code constant: '5' key. */ 25 public static final int KEYCODE_5               = 12; 26 /** Key code constant: '6' key. */ 27 public static final int KEYCODE_6               = 13; 28 /** Key code constant: '7' key. */ 29 public static final int KEYCODE_7               = 14; 30 /** Key code constant: '8' key. */ 31 public static final int KEYCODE_8               = 15; 32 /** Key code constant: '9' key. */ 33 public static final int KEYCODE_9               = 16; 34 /** Key code constant: '*' key. */ 35 public static final int KEYCODE_STAR            = 17; 36 /** Key code constant: '#' key. */ 37 public static final int KEYCODE_POUND           = 18; 38 /** Key code constant: Directional Pad Up key. 39  * May also be synthesized from trackball motions. */ 40 public static final int KEYCODE_DPAD_UP         = 19; 41 /** Key code constant: Directional Pad Down key. 42  * May also be synthesized from trackball motions. */ 43 public static final int KEYCODE_DPAD_DOWN       = 20; 44 /** Key code constant: Directional Pad Left key. 45  * May also be synthesized from trackball motions. */ 46 public static final int KEYCODE_DPAD_LEFT       = 21; 47 /** Key code constant: Directional Pad Right key. 48  * May also be synthesized from trackball motions. */ 49 public static final int KEYCODE_DPAD_RIGHT      = 22; 50 /** Key code constant: Directional Pad Center key. 51  * May also be synthesized from trackball motions. */ 52 public static final int KEYCODE_DPAD_CENTER     = 23; 53 /** Key code constant: Volume Up key. 54  * Adjusts the speaker volume up. */ 55 public static final int KEYCODE_VOLUME_UP       = 24; 56 /** Key code constant: Volume Down key. 57  * Adjusts the speaker volume down. */ 58 public static final int KEYCODE_VOLUME_DOWN     = 25; 59 /** Key code constant: Power key. */ 60 public static final int KEYCODE_POWER           = 26; 61 /** Key code constant: Camera key. 62  * Used to launch a camera application or take pictures. */ 63 public static final int KEYCODE_CAMERA          = 27; 64 /** Key code constant: Clear key. */ 65 public static final int KEYCODE_CLEAR           = 28; 66 /** Key code constant: 'A' key. */ 67 public static final int KEYCODE_A               = 29; 68 /** Key code constant: 'B' key. */ 69 public static final int KEYCODE_B               = 30; 70 /** Key code constant: 'C' key. */ 71 public static final int KEYCODE_C               = 31; 72 /** Key code constant: 'D' key. */ 73 public static final int KEYCODE_D               = 32; 74 /** Key code constant: 'E' key. */ 75 public static final int KEYCODE_E               = 33; 76 /** Key code constant: 'F' key. */ 77 public static final int KEYCODE_F               = 34; 78 /** Key code constant: 'G' key. */ 79 public static final int KEYCODE_G               = 35; 80 /** Key code constant: 'H' key. */ 81 public static final int KEYCODE_H               = 36; 82 /** Key code constant: 'I' key. */ 83 public static final int KEYCODE_I               = 37; 84 /** Key code constant: 'J' key. */ 85 public static final int KEYCODE_J               = 38; 86 /** Key code constant: 'K' key. */ 87 public static final int KEYCODE_K               = 39; 88 /** Key code constant: 'L' key. */ 89 public static final int KEYCODE_L               = 40; 90 /** Key code constant: 'M' key. */ 91 public static final int KEYCODE_M               = 41; 92 /** Key code constant: 'N' key. */ 93 public static final int KEYCODE_N               = 42; 94 /** Key code constant: 'O' key. */ 95 public static final int KEYCODE_O               = 43; 96 /** Key code constant: 'P' key. */ 97 public static final int KEYCODE_P               = 44; 98 /** Key code constant: 'Q' key. */ 99 public static final int KEYCODE_Q               = 45;100 /** Key code constant: 'R' key. */101 public static final int KEYCODE_R               = 46;102 /** Key code constant: 'S' key. */103 public static final int KEYCODE_S               = 47;104 /** Key code constant: 'T' key. */105 public static final int KEYCODE_T               = 48;106 /** Key code constant: 'U' key. */107 public static final int KEYCODE_U               = 49;108 /** Key code constant: 'V' key. */109 public static final int KEYCODE_V               = 50;110 /** Key code constant: 'W' key. */111 public static final int KEYCODE_W               = 51;112 /** Key code constant: 'X' key. */113 public static final int KEYCODE_X               = 52;114 /** Key code constant: 'Y' key. */115 public static final int KEYCODE_Y               = 53;116 /** Key code constant: 'Z' key. */117 public static final int KEYCODE_Z               = 54;

 

In fact, nearly 260 key values are defined in the source file KeyEvent. java. Only 27 key values (Back, Home, numbers, and uppercase letters) are provided here ). 2. to simulate the function of keys in the program code, it is best to use them together with the thread. Otherwise, some keys may end abnormally During the simulation process. For example, if the return key is Back and the key value is 4, if it is directly simulated, the operation is terminated. The code is very simple. You only need two sentences: 1 Instrumentation inst = new Instrumentation (); 2 inst. sendCharacterSync (KeyEvent. KEYCODE_BACK); Instrumentation and Activity are a bit similar, but Activity requires an interface, and Instrumentation is not like this. We can understand it as a Tool class that has no graphical interface and can be started and used to monitor other classes (declared using the Target Package. 3. Next, we will use the Thread to simulate the effect of keys. Of course, we also use the Message mechanism (Handler and Message): a. First, we use onCreate () define the Handler Object handler, 1 Handler handler; B. Then define and start the thread in the onCreate method,
 1 Thread t = new Thread() { 2     public void run() { 3         Looper.prepare(); 4         handler = new Handler() { 5           public void handleMessage(Message msg) { 6                Instrumentation inst = new Instrumentation(); 7                //inst.sendCharacterSync(msg.what); 8                inst.sendKeyDownUpSync(msg.what); 9            }10         };11         Looper.loop();12     }13 };14 t.start(); 

 

Note that the comments in the above Code prove that both methods (sendCharacterSync (int keycode) and sendKeyDownUpSync (int keycode) can achieve the expected results. C. When the thread is enabled, a Message with a key value is sent. Add the following code to the Execution code block: 1 Message msg = new Message (); 2 // msg. what = KeyEvent. KEYCODE_BACK; 3 msg. what = Integer. parseInt (key_value.getText (). toString (); 4 handler. sendMessage (msg); here, the key value is attached to what Member of the message object. There are many implementation methods, which are not provided here. As you can see, the comments in the Code fix the key value: msg. what = KeyEvent. KEYCODE_BACK; this method is not practical, whether it is debugging or running the application to simulate buttons in the future. You need to reset and run the program every time. Therefore, this program adopts the following method: Define an edit box component key_value on the main interface, simulate the expected key value (you need to convert the key value from the String type to the int type ). Of course, the premise is to have a general understanding of the buttons and corresponding values. 4. After testing, we found that some buttons cannot be simulated to achieve real results. For example, the Home key, as shown in the official document, does not allow the Home Key to be simulated for general applications, that is, permissions are set. Similar to the full-screen mobile phone screenshot API, the System-level or Root-level application is required to achieve the desired effect. The alternative solution is not feasible either: Called to process key events. you can override this to intercept all key events before they are dispatched to the window. be sure to call this implementation for key events that shocould be handled normally. 5. The following provides an easy alternative solution. Although it is relatively shanzhai, the effect is okay:
 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3     if(keyCode == KeyEvent.KEYCODE_BACK){ 4         Intent intent = new Intent(Intent.ACTION_MAIN); 5         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 6         intent.addCategory(Intent.CATEGORY_HOME); 7         this.startActivity(intent); 8         return true; 9     }10     return super.onKeyDown(keyCode, event);11 }

 

It should be noted that the setting of ACTION and CATEGORY and AndroidManifest. consistent in xml file, flag is set to Intent. FLAG_ACTIVITY_NEW_TASK. If not, it is not generated as a role of a new task.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.