рдбреЙрдХ рдореЛрдб рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛ (рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)

рдкрд░рд┐рдЪрдп


рдРрд╕рд╛ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдЧреИрд▓реЗрдХреНрд╕реА рдПрд╕ 3 рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рдорд╛рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдиреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ, рдПрдХ рдирдпрд╛, рдмрд╣реБрдд рдЙрдмрд╛рдК рдХрд╛рд░ рдбреЙрдХ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред рд▓рд╛рдЗрди рдХреЗ рдкрд┐рдЫрд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ (рдПрд╕, рдПрд╕ 2, рдиреЛрдЯ) рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдПрдХ "рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ" рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдлреЛрди рдХреЛ рдХрд╛рд░ рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рдПрд╕рдЬреАрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдбреЙрдХрд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рдореИрдВ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЧреЛрджреА рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕реНрдкреАрдХрд░рдлреЛрди рдореЛрдб рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЯрдЪрд╡рд┐рдЬрд╝ рдореЗрдВ рдкрд░рд┐рджреГрд╢реНрдп рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирдП рдЧреЛрджреА рдореЗрдВ рдпрд╣ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ ...

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдПрдирдПрдлрд╕реА-рдЯреИрдЧ, рд░реВрдЯ, рд╕рд╛рде рд╣реА рдХрдИ рдШрдВрдЯреЛрдВ рдХреА рдЦреЛрдЬ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ


рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВрдиреЗ рдХреА рдереА, рддрдм рднреА рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ "рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ" рдбреЙрдХ рдирд╣реАрдВ рдерд╛, рдкрд╣рд▓реЗ рдПрд╕рдЬреАрдПрд╕ рд╕реЗ рдбреЙрдХрд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдо рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЙрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдордЬрд╝реЗрджрд╛рд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛:



рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ "рдХрд╛рд░" рдЖрдЗрдХрди рдлрд╝реНрд▓рдВрдЯ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рдореЛрдб (рдЬреЛ рдХрд┐ рдПрд╕-рд╡реЙрдпрд╕) рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗ рд╣реА рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрд╕рдЬреАрдПрд╕ рдФрд░ рдЗрд╕рдХреЗ рдбреЙрдХ рджреЛрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдпрд╛ рдбреЙрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдпрд╛, рдФрд░ рд╢рд╛рд╕рди рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рд╡рд╛рд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрднрд░ рдЖрдпрд╛ред рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХрд╛рд░ рдореЛрдб рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдПрдлрд╕реА рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП? Google Play рдкрд░ рдРрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХрдерд┐рдд рддреМрд░ рдкрд░ рдХрд╛рд░ рдореЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдорд╛рдирдХ UiModeManager рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд┐рд░реНрдл рдХрд╛рд░ рд╣реЛрдо, рдФрд░ рд╕реНрдкреАрдХрд░рдлреЛрди рдФрд░ рд▓реИрдВрдбрд╕реНрдХреЗрдк рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рд╣реЛрдВред



рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╡рд┐рдзрд┐ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЙрдкрдХрд░рдг рдЧреЛрджреА рдореЗрдВ рд╣реИ:
registerReceiver(null, new IntentFilter(Intent.ACTION_DOCK_EVENT)).getIntExtra(Intent.EXTRA_DOCK_STATE, -1); 

рдФрд░ рдпрд╣ рднреА рд╡рд┐рдзрд┐ рд╣реИ рдХрд┐ рдЗрд╕ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ:
 sendStickyBroadcast((new Intent(Intent.ACTION_DOCK_EVENT)).putExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_CAR)); 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, USB рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЬрдбрд╝ рдХреЗ рд╕рд╛рде рднреА, рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдПрдХ рд╕рд░рд▓ рдФрд░ рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рд╕рдорд╛рдзрд╛рди рд╣реИ:
 su -c /system/bin/am broadcast -a android.intent.action.DOCK_EVENT --ei android.intent.extra.DOCK_STATE 2 

рдЬреЛ, рдЕрдлрд╕реЛрд╕, рдЕрдзреВрд░рд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдХреЙрд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рдХрд╛рд░ рдореЛрдб рдХреЛ рдЪрд╛рд▓реВ рдХрд░ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдкреНрд░рд╕рд╛рд░рдг рд╣реИ, рдФрд░ "рдЪрд┐рдкрдЪрд┐рдкрд╛" рдирд╣реАрдВ рд╣реИ (am рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ), рдбреЙрдХрд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рджреЛ рдмрдЯрди рд╣реЛрддреЗ рд╣реИрдВ ("рдЪрд╛рд▓реВ рдХрд░реЗрдВ" рдФрд░ "рдмрдВрдж рдХрд░реЗрдВ"), рдпрд╛ рдПрдХ рдкреВрд░реНрдг-рд╕рд┐рд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдвреЗрдВред

рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрд░реЛрдд рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдШреВрдорддреЗ рд╣реБрдП, рдЖрдк рдбреЙрдХрдСрдмреНрдЬрд░реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд┐рд░реНрдл рдпрд╣ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореЛрдб рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЛрджреА рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдХреА рдзреНрд╡рдирд┐ рдирд┐рднрд╛рддрд╛ рд╣реИ), рд╕рд╛рде рд╣реА рд╕рд╛рде рдпрд╣ рддрдм рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдирд╛ (рдпреВрдИрд╡реЗрдВрдЯ) рдЖрддреА рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдЖрдк рдРрд╕реА рдШрдЯрдирд╛ рдмрдирд╛рдирд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рди рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ!

рдЦреИрд░, рдпрд╣ NDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рдлреА рд╕рд░рд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 char event[] = "ACTION=change\0DEVPATH=/devices/virtual/switch/dock\0SUBSYSTEM=switch\0SWITCH_NAME=state\0SWITCH_STATE=2"; int sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); if (sock != -1) { struct sockaddr_nl snl; struct iovec iov = { event, sizeof(event) }; struct msghdr msg = { &snl, sizeof(snl), &iov, 1, NULL, 0, 0 }; memset(&snl, 0, sizeof(struct sockaddr_nl)); snl.nl_family = AF_NETLINK; snl.nl_pid = getpid(); snl.nl_groups = -1; sendmsg(sock, &msg, 0); close(sock); } 

рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░реВрдЯ рдХреЗ рддрд╣рдд рдХрдВрд╕реЛрд▓ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рддреЛ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рдпрдВ Google Play рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдЕрдм рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реНрдЯреЛрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк .apk рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдпрд╣ рдлреЛрди рдХреЛ рдХрд╛рд░ рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ, рдкреБрдирдГ рдЖрд░рдВрдн рдореЗрдВ, рдпрд╣ рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдПрдирдПрдлрд╕реА рдЯреИрдЧ рдкрд░ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рд╣реА рдкреВрд░реНрдг рдХрд╛рд░ рдбреЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЦреИрд░, рд╕рднреА рд╕реНрд░реЛрддреЛрдВ GitHub рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/In184280/


All Articles