This article uses the zmyde2010 method to start the screenshot service on sunsumg i9100 and record the operation process here.
Link to zmyde2010: http://blog.csdn.net/zmyde2010/article/details/6925498
This screenshot method is based on the android source code.
Frameworks \ base \ Services \ surfaceflinger \ tests \ screencap. cpp
1 /*
2 x copyright (c) 2010 the android open source project
3 *
4 * licensed under the Apache license, version 2.0 (the "License ");
5 * you may not use this file except T in compliance with the license.
6 * You may obtain a copy of the license
7 *
Http://www.apache.org/licenses/LICENSE-2.0 8 *
9 *
10 * unless required by applicable law or agreed to in writing, software
11 * distributed under the license is distributed on an "as is" basis,
12 * Without warranties or conditions of any kind, either express or implied.
13 * See the license for the specific language governing permissions and
14 * limitations under the license.
15 */
16
17 # include <utils/log. h>
18
19 # include <binder/ipcthreadstate. h>
20 # include <binder/processstate. h>
21 # include <binder/iservicemanager. h>
22
23 # include <binder/imemory. h>
24 # include <surfaceflinger/isurfacecomposer. h>
25
26 # include <skimageencoder. h>
27 # include <skbitmap. h>
28
29 using namespace android;
30
31 int main (INT argc, char ** argv)
32 {
33 If (argc! = 2 ){
34 printf ("Usage: % s path \ n", argv [0]);
35 exit (0 );
36}
37
38 const string16 name ("surfaceflinger ");
39 sp <isurfacecomposer> composer;
40 getservice (name, & composer );
41
42 sp <imemoryheap> heap;
43 uint32_t W, h;
44 pixelformat F;
45 status_t err = composer-> capturescreen (0, & heap, & W, & H, & F, 0, 0 );
46 If (Err! = No_error ){
47 fprintf (stderr, "screen capture failed: % s \ n", strerror (-err ));
48 exit (0 );
49}
50
51 printf ("screen capture success: W = % u, H = % u, pixels = % P \ n ",
52 W, H, heap-> getbase ());
53
54 printf ("Saving file as PNG in % s... \ n", argv [1]);
55
56 skbitmap B;
57 B. setconfig (skbitmap: kargb_8888_config, W, H );
58 B. setpixels (heap-> getbase ());
59 skimageencoder: encodefile (argv [1], B,
60 skimageencoder: kpng_type, skimageencoder: kdefaultquality );
61
62 Return 0;
63}
Download the Code provided in this article. The method I use is to add the code to the CM source code.
Compile
To maintain source code consistency, place the screencap code in the packages/apps directory.
The next step is to compile the system so that the new system package contains the screencap program.
To include the program we added when compiling the target source code, add the package name in the bulid/target/product/generic. mk file:
Product_packages: =/
Accountandsyncset.pdf/
Carhome/
Deskclock/
......
Syncprovider/
Screencap
Then, in Android. mk, note that the local_module_tags: = optional statement is included.
After completing these steps, you can compile the source code to burn the system.
After the system is burned, in the system, the default property of the screenshot program is to start automatically at startup, as a system service waiting for calling.
In your own application, use the following statement to enable the Service:
Sendbroadcast (new intent ("com. Android. capture_screen "));
Generate an image under the SD card directory.
In this way, Wayne successfully runs the screenshot program on the i9100 mobile phone. The same is true. please correct me!