рдХреЗрддрд▓реА рд╕реЗ Android Camera2 API



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

рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рдЬрдм рдореИрдВрдиреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдПрдХ рдЦрд░рд╛рдм рдЖрдИрдбреАрдИ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ рд▓рдЧрд╛рддрд╛рд░ рдореЗрд░реЗ рдХреЛрдб рдХреЛ рдкрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХрд╣рд╛ред

рдХреИрдорд░рд╛ = рдХреИрдорд░рд╛ред рдЦреБрд▓рд╛ ();

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрдврд╝рд╛ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ , рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣рд╛рдВ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдХреИрдорд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╕рдмрдХ рд╕реАрдЦреЗред рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдкрд╛рд░ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдФрд░ рдЗрд╕реЗ рдХреИрдорд░рд╛ рдПрдкреАрдЖрдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рд╡рд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рдерд╛ред рд▓реЗрдХрд┐рди Google рдиреЗ рдореБрдЭреЗ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ Camera2 API рдХреА рдУрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ред

рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рджреЗрдЦрд╛ рдФрд░ рдмрд╕ рдбреЗрдореЛ рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреЙрд▓рдмреИрдХ, рдмрд┐рд▓реНрдбрд░реЛрдВ, рд╣реИрдВрдбрд▓рд░ рдФрд░ рд▓реВрдкрд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдкрдбрд╝ рдЧрдпрд╛ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╢реМрдХрд┐рдпрд╛ рд╣реИрдВ, рддреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдЬ рднреА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХреИрдорд░рд╛ 2 рдПрдкреАрдЖрдИ рдкрд░ рдХреБрдЫ рд▓реЗрдЦ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдкрдбреЗрдЯ рдЪрд╛рд░ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ 2016 рдореЗрдВ рд╣реИрдХрд░ рдХрд╛ рдПрдХ рд▓реЗрдЦ рдерд╛, рдЙрд╕реА рд╡рд░реНрд╖ рдХреЗ рдпреВрдХреНрд░реЗрдиреА рднрд╛рдЗрдпреЛрдВ рд╕реЗ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рдПрдХ рдкреЛрд╕реНрдЯ, 2017 рдореЗрдВ рд╣реИрдмреЗ рдкрд░ рдПрдХ рдбрдмрд▓ рдкреЛрд╕реНрдЯ рдФрд░ рдЬрд╛рдкрд╛рдиреА рдореЗрдЧрд╛рдлреЛрди рдЯреЛрдорд╛рдХреА рдЗрдорд╛рдИ рд╕реЗ рдПрдХ рд▓реЗрдЦ рдЕрдВрдбрд░рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рдХреИрдорд░рд╛ 2ред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рд╕рдВрд░рдЪрд┐рдд рдФрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рди рдХрд┐ рдХреЛрдб рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рдЬреИрд╕реЗ "рдореИрдВ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ" рдФрд░ рдкрддреНрд░рдХ рд╢реИрд▓реА рдореЗрдВ "рдХреЛрдб pliz рдХреЛ рджреЗрдЦреЛ, рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛" рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВред

рдФрд░ рдЕрдм, рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2019 рдореЗрдВ, рдлрд┐рд░ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд╣реИрдХрд░ рдХрд╛ рд▓реЗрдЦ рдкрд╕рдВрдж рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрд╡рд▓реЛрдХрди рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдирдпрд╛ рдкреНрд░рддрд┐рдорд╛рди рдХреНрдпреЛрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдХреБрдЫ рдирдП рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереА рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдирд╣реАрдВ рдереЗред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрднрд╡ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦрдХ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЕрд╕рд▓реА рд╣реИрдХрд░реНрд╕ рдХреА рддрд░рд╣, рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж рдЕрдм рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред

Habr├й рдкрд░ рдкреЛрд╕реНрдЯ рдЕрдЪреНрдЫрд╛ рдерд╛, рдореИрдВ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░рддрд╛, рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдкреИрд░рд╛рдЧреНрд░рд╛рдлреЛрдВ рдХреЛ рднреА рд╕рдордЭрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдереА, рдХреНрдпреЛрдВрдХрд┐ рдкреЛрд╕реНрдЯ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ RxJava2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдорд░реЗ рдХреЛ рд╣рд░рд╛рдпрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдХреЗ рдкрд╛рдардХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ред рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ OOP рд╕реЗ рдирд┐рдкрдЯреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред

рдЬрд╛рдкрд╛рдиреА рд▓реЗрдЦ рдФрд░ рднреА рдмреЗрд╣рддрд░ рдерд╛, рднрд▓реЗ рд╣реА рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреА рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдХреНрдпреЛрдВ рди рд▓рд┐рдЦрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдпрд╛ рддреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдШрд░реЗрд▓реВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА, рдЬреЛ рдХрд┐ Google рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреЗрдЬ рдкрд░ JAVA рд╕реЗрдВрд╡рдИ рдХреЗ рд╡рд┐рдкрд░реАрдд рдерд╛ (рд╡реИрд╕реЗ, рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рд╡рд╣рд╛рдБ рдерд╛) рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ)ред

рдЖрдЦрд┐рд░реА рд▓реЗрдЦ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рд╛рдн рдкрд╣реБрдВрдЪрд╛рдпрд╛, рд╡рд╣ рдерд╛ рднреНрд░рд╛рддреГ рдпреВрдХреНрд░реЗрди рд╕реЗ рддреАрди-рднрд╛рдЧ рд╡рд╛рд▓рд╛ рдкреЛрд╕реНрдЯред рдореИрдВрдиреЗ рднреА рд╡рд╣рд╛рдВ рдХреБрдЫ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рджреЗрдЦрд╛ред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдмрд╣реБрдд рдердХ рдЧрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХреЛрдб рднреА рдЬрд╛рд░реА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдЬреЛ рдореЗрд░реЗ рдкреВрд░реЗ рдХрд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реБрдП рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрдд рдореЗрдВ, рд▓реЗрдЦрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ рдЧрд▓рдд рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдХреА рдЫрд╡рд┐ рдорд┐рд▓реА рдереА рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд╣ рдЧрд┐рди рд░рд╣рд╛ рдерд╛ред



рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЙрд▓реАрдкреЙрдк рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 5.0 рд╣реИ, рдФрд░ рдПрдХ рдмрдЧ рд╣реИред рдЖрдкрдХреЛ рд▓реЙрд▓реАрдкреЙрдк 5.1 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдЕрднреА рддрдХ рдирд╣реАрдВред рдФрд░ рд╣рд╛рдирд┐рдХрд╛рд░рдХ Ukrainians рднреА JAVA SCRIPT рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЙрдкрд╡рд╛рд╕ рдХрд┐рдпрд╛, рдФрд░ рдЬрдм рдХреЛрдб рдХреА рдирдХрд▓ рдПрдХ рдХрдЪрд░рд╛ рдХреА рдПрдХ рдЬрдВрдЧрд▓реА рд░рд╛рд╢рд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд╛рда рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рджреЛрд╕реНрддреЛрдВ, рдареАрдХ рд╣реИ, рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ ... рдореБрдЭреЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рдЧ-рдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдерд╛ред

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

рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдкреВрд░реА рдмрд╛рдд рдкреВрд░реА рдирд┐рд░рд╛рд╢рд╛ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рд╡реЗ рдореЛрдВрдЯ рдмреНрд▓рд╛рдВрдХ рдкрд░ рдЪрдврд╝ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред

рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреИрдорд░рд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдиреЛрдХрд┐рдпрд╛ рдХреЗ рдкрд╛рдВрдЪ рдореБрдЦреНрдп рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдлрд╡рд╛рд╣ рд▓реАрдХ рд╣реБрдИ рдереАред рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ? рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рд╣реЛрдирд╣рд╛рд░ рдЕрдлрд╡рд╛рд╣ рдпрд╛ рджреВрд╕рд░реА рдЕрдЬреАрдм рдмрд╛рдд? рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рддрдирд╛ рдЕрдиреВрдард╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдиреЛрдХрд┐рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдореНрдкреИрдХреНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд▓реЗрдВрд╕ рдФрд░ рд╕реЗрдВрд╕рд░ рдХреА рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдЧреНрд░рдгреА рдирд╣реАрдВ рдмрди рдкрд╛рдПрдЧрд╛ред рд▓рд╛рдЗрдЯ рдПрд▓ 16 рдХреИрдорд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2015 рдореЗрдВ 16 рд▓реЗрдВрд╕ рд╕реЗ рд▓реИрд╕ рдерд╛, рдФрд░ рдХрдВрдкрдиреА, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдСрдкрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИред рдКрдкрд░ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

рд╣реБрдЖрд╡реЗрдИ P20 рдкреНрд░реЛ рдореЗрдВ рдЯреНрд░рд┐рдкрд▓ рдХреИрдорд░рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╛рдВрдЪ рдХреИрдорд░реЛрдВ рд╡рд╛рд▓реЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдЕрдм рдЙрддрдирд╛ рд╣рд╛рд╕реНрдпрдкреВрд░реНрдг рдирд╣реАрдВ рд▓рдЧрддрд╛ рдЬрд┐рддрдирд╛ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реИ?
рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЗрдВрд╕реЛрдВ рдХрд╛ рдХреНрдпрд╛ рдХрд░реЗрдВ?

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

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

рд╣реБрдЖрд╡реЗрдИ рдкреА 20 рдкреНрд░реЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдХреИрдорд░рд╛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо Huawei, рдореЛрдиреЛрдХреНрд░реЛрдо рдФрд░ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдЬрд╝реВрдо рдЬреИрд╕реА рддрдХрдиреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдЖрд░рдЬреАрдмреА рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдорд╛рдирдХ рдлреНрд░реЗрдо рдХреА рдЧрддрд┐рд╢реАрд▓ рд╕реАрдорд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдЬрд╝реВрдо рдФрд░ рднреА рдЕрдзрд┐рдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдмреЗрд╣рддрд░ рдЬрд╝реВрдо рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреИрдорд░реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдкреА 20 рдкреНрд░реЛ 8 рдПрдордкреА рдореЗрдВ, рдЯреЗрд▓реАрдлреЛрдЯреЛ рд▓реЗрдВрд╕ рд╕реЗрдВрд╕рд░ рдЖрдкрдХреЛ 10 рдПрдордкреА рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдореЗрдВ 3x рдФрд░ 5x рдЬрд╝реВрдо рдореЗрдВ рд╢реВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрдЪреНрдЪ рд╕рдВрдХрд▓реНрдк - рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди

рдкрд╣рд▓реЗ рд▓рд╛рдЗрдЯ L16 рдХреИрдорд░реЗ рдиреЗ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛, рдХреИрдорд░рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрдореНрдкреИрдХреНрдЯ рдмреЙрдбреА рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд░рд┐рд╕реНрдХреЛрдк рдорд┐рд░рд░реНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдХреИрдорд░реЗ рдиреЗ рдЬрд╝реВрдо рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 28, 70 рдФрд░ 150 рдорд┐рдореА рдореЗрдВ рдХрдИ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдбреЗрдЯрд╛ рд▓рд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо 5x рддрдХ рдХреЗ рдЖрд╡рд░реНрдзрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЙрдкрд▓рдмреНрдз 10 рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХреЛрдгреЛрдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдмрдбрд╝рд╛ 52 рдПрдордкреА рд╢реЙрдЯ рдерд╛ред рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдирдП рдореЙрдбрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛, 5-9 рд▓реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИред рдРрд╕рд╛ рдХреИрдорд░рд╛ рдореЙрдбреНрдпреВрд▓ рдмрдбрд╝реА 64-рдореЗрдЧрд╛рдкрд┐рдХреНрд╕реЗрд▓ рддрд╕реНрд╡реАрд░реЗрдВ рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

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

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

2013 рдореЗрдВ рдкреЗрд▓рд┐рдХрди рдЗрдореЗрдЬрд┐рдВрдЧ рдореЗрдВ рдирд┐рд╡реЗрд╢ рдХреЗ рдкреБрд░рд╛рдиреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХреЛ рдХрдИ рдХреИрдорд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдиреЛрдХрд┐рдпрд╛ рдХреЗ рдЕрдиреБрднрд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓рд╛рдЗрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рд╕реЗрдВрд╕рд░ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА, рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдмрд╣реБрдд рд╕рдорд╛рди рд▓рд╛рдн рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдлреЛрдХрд╕ рдкрд░рд┐рд╡рд░реНрддрди, рдЧрд╣рд░рд╛рдИ рдорд╛рдк рдФрд░ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЯреЗрд╕реЗрд░рд╛ рдиреЗ 2016 рдореЗрдВ рдХрдВрдкрдиреА рдЦрд░реАрджреА рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╢рд╛рдпрдж рдиреЛрдХрд┐рдпрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реЛрдЧрд╛ред

рдлреЛрдЯреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдиреЛрдХрд┐рдпрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рд╛рдЭреЗрджрд╛рд░ рдЬрд╝реАрд╕ рдХреЗ рдкрд╛рд╕ рд╕реНрд╡рд┐рдЪреЗрдмрд▓ рдЬрд╝реВрдо рдХрд╛ рдкреЗрдЯреЗрдВрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЙрдирд╕реЗ рдХрдИ рд▓реЗрдВрд╕ рд╡рд╛рд▓реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред рд╢рд╛рдпрдж рдиреЛрдХрд┐рдпрд╛ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рд╛рдереА, рдПрдлрдЖрдИрдПрдЪ рдореЛрдмрд╛рдЗрд▓, рдЕрдзрд┐рдХ рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдХрдВрдкрдиреА рдлреЙрдХреНрд╕рдХреЙрди рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рд╣реИ, рдиреЛрдХрд┐рдпрд╛ рдлреЛрди рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИ рдФрд░ 2015 рдореЗрдВ рд▓рд╛рдЗрдЯ рдореЗрдВ рднреА рдирд┐рд╡реЗрд╢ рдХрд░рддреА рд╣реИ, рдпрд╣ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреЗрддрд╛ рд╣реИред

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдХрд┐рдпрд╛ рд▓реАрдХ рдФрд░ рд▓рд╛рдЗрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдИ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред рджреЛ рдлреЙрдХреНрд╕рдХреЙрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рддреЛ рдХреНрдпрд╛ рдиреЛрдХрд┐рдпрд╛ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЗрдЯ рд╕реЗ рддрдХрдиреАрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдЧрд╛?
рддреЛ рдХреНрдпрд╛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рд╣реИ?

рдЕрд▓реНрдЯреНрд░рд╛-рд╣рд╛рдИ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред 2014 рдореЗрдВ, рдУрдкреНрдкреЛ рдлрд╛рдЗрдВрдб 7 рдиреЗ рдПрдХ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рд╣реБрдЖрд╡реЗрдИ рдХреЗ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдЬрд╝реВрдо рдиреЗ рддрдХрдиреАрдХ рдХреЛ рдХрдИ рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдереАред рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдмрд┐рдЬрд▓реА рдХреА рдЦрдкрдд рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреА рдУрд░, рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕рд░, рдКрд░реНрдЬрд╛-рдХреБрд╢рд▓ рдбреАрдПрд╕рдкреА рдЪрд┐рдкреНрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдмреЗрд╣рддрд░ рдХреНрд╖рдорддрд╛рдУрдВ, рдЬреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЙрдЪреНрдЪ рд╡рд┐рд╕реНрддрд╛рд░, рдСрдкреНрдЯрд┐рдХрд▓ рдЬреВрдо рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдПрдХ рдХрд╕реНрдЯрдо рдмреЛрдХреЗрд╣ рдкреНрд░рднрд╛рд╡ рдПрдХ рдЖрдзреБрдирд┐рдХ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдХреИрдорд░рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ, рдФрд░ рдорд▓реНрдЯреА-рдХреИрдорд░рд╛ рддрдХрдиреАрдХ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореЛрдмрд╛рдЗрд▓ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рднрд╡рд┐рд╖реНрдп рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдФрд░ рд▓рдЪреАрд▓реА рдХреНрд╖рдорддрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреИрдорд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реИред

рд▓рд╛рдЗрдЯ рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА рд╕рд╡рд╛рд▓ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлреЛрдХрд▓ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде gluing рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╣рдо рдХреЗрд╡рд▓ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рджреВрд╕рд░реА рдкреАрдврд╝реА рдореЗрдВ рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред



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

рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдм Google рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереА?

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

mCameraManager.openCamera() 

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

рдЗрд╕ рдмреАрдЪ, рдХреБрдЫ рджрд╕рд┐рдпреЛрдВ рдФрд░ рд╕реИрдХрдбрд╝реЛрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрдВрдд рдореЗрдВ рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЬреИрд╕реЗ рд╣реА рдХреИрдорд░рд╛ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕реА рдХреЙрд▓рдмреИрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)

  private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; createCameraPreviewSession(); тАж.. } 

рдпрд╣реА рд╣реИ, рдХреИрдорд░рд╛ рдЕрдм рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рджреГрд╢реНрдп рдкрд░ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдирддреАрдЬрддрди, рд╕рднреА рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдХреА рдиреЗрдХ рдЗрдЪреНрдЫрд╛ рдореЗрдВ, Google рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдереЛрдбрд╝реЗ рдмрд╣реБрдд рджреВрд░ рдЪрд▓реЗ рдЧрдП, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЬрд╛рдкрд╛рдиреА рдХрд╛рдорд░реЗрдб рдиреЗ рдареАрдХ рд╕реЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рд╣реИ:
рдХреИрдорд░рд╛ 2 рдХреЗ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╢реЙрдЯ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рддрдиреЗ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдХреИрдорд░реЗ рдХреА рдкреВрд░реА рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрд╣ рднрдпрд╛рдирдХ рд░реВрдк рд╣реИ



рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



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

рдХреЛрдб рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛

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

рд╣рдо CameraManager рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрдкрд▓рдмреНрдз рдХреИрдорд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЖрдк рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдФрд░ рдХреИрдорд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╢реВрдЯрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВред

рдФрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджреЗрдЦреЗрдВрдЧреЗ:

рдХреИрдорд░рд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (0, 1, 2 ....)
рджрд┐рд╢рд╛ рдЬрд╣рд╛рдВ рдХреИрдорд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЖрдЧреЗ, рдкреАрдЫреЗ)
рдХреИрдорд░рд╛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрдорд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рд▓реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

 package com.example.camera; import android.content.Context; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import android.graphics.ImageFormat; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraManager; import android.hardware.camera2.params.StreamConfigurationMap; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.util.Size; public class MainActivity extends AppCompatActivity { public static final String LOG_TAG = "myLogs"; String[] myCameras = null; private CameraManager mCameraManager = null; @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try{ //      myCameras = new String[mCameraManager.getCameraIdList().length]; //     for (String cameraID : mCameraManager.getCameraIdList()) { Log.i(LOG_TAG, "cameraID: "+cameraID); int id = Integer.parseInt(cameraID); // e   CameraCharacteristics cc = mCameraManager.getCameraCharacteristics(cameraID); //    ,    StreamConfigurationMap configurationMap = cc.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); //      int Faceing = cc.get(CameraCharacteristics.LENS_FACING); if (Faceing == CameraCharacteristics.LENS_FACING_FRONT) { Log.i(LOG_TAG,"Camera with ID: "+cameraID + " is FRONT CAMERA "); } if (Faceing == CameraCharacteristics.LENS_FACING_BACK) { Log.i(LOG_TAG,"Camera with: ID "+cameraID + " is BACK CAMERA "); } //        jpeg Size[] sizesJPEG = configurationMap.getOutputSizes(ImageFormat.JPEG); if (sizesJPEG != null) { for (Size item:sizesJPEG) { Log.i(LOG_TAG, "w:"+item.getWidth()+" h:"+item.getHeight()); } } else { Log.i(LOG_TAG, "camera don`t support JPEG"); } } } catch(CameraAccessException e){ Log.e(LOG_TAG, e.getMessage()); e.printStackTrace(); } } } 

рд▓реЙрдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓реЗрдЧрд╛:
 2019-09-13 10:56:31.489 11130-11130/? I/myLogs: cameraID: 0 2019-09-13 10:56:31.504 11130-11130/? I/myLogs: Camera with: ID 0 is BACK CAMERA 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:4000 h:3000 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:4000 h:2250 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:3840 h:2160 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:2592 h:1944 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:2592 h:1940 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:2048 h:1536 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1920 h:1080 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1600 h:1200 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1440 h:1080 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1440 h:720 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1280 h:960 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1280 h:768 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1280 h:720 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1280 h:480 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:1280 h:400 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:800 h:480 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:720 h:480 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:640 h:480 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:480 h:640 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:480 h:360 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:480 h:320 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:352 h:288 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:320 h:240 2019-09-13 10:56:31.506 11130-11130/? I/myLogs: w:240 h:320 2019-09-13 10:56:31.507 11130-11130/? I/myLogs: w:176 h:144 2019-09-13 10:56:31.507 11130-11130/? I/myLogs: w:144 h:176 2019-09-13 10:56:31.507 11130-11130/? I/myLogs: cameraID: 1 2019-09-13 10:56:31.514 11130-11130/? I/myLogs: Camera with ID: 1 is FRONT CAMERA 2019-09-13 10:56:31.515 11130-11130/? I/myLogs: w:4224 h:3136 2019-09-13 10:56:31.515 11130-11130/? I/myLogs: w:4224 h:2376 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:4160 h:3120 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:4160 h:2340 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:4000 h:3000 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:4000 h:2250 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:3840 h:2160 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:2592 h:1944 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:2592 h:1940 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:2048 h:1536 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1920 h:1080 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1600 h:1200 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1440 h:1080 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1440 h:720 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1280 h:960 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1280 h:768 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1280 h:720 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1280 h:480 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:1280 h:400 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:800 h:480 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:720 h:480 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:640 h:480 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:480 h:640 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:480 h:360 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:480 h:320 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:352 h:288 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:320 h:240 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:240 h:320 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:176 h:144 2019-09-13 10:56:31.516 11130-11130/? I/myLogs: w:144 h:176 


рд╣рдо, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдкрд┐рдЫрд▓реЗ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рднреА рдХрд┐рд╕реА рднреА рдЪрд╛рдпрджрд╛рдиреА рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдХреИрдорд░реЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рдФрд░ рдЙрд╕рд╕реЗ рдЖрдЧреЗ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИрдВ, рдХрд┐ рдЖрдк 1920 рдХреЗ 1080 рдХреЗ рд╕рдВрдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдХреЛ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬреЗрдкреАрдИрдЬреА рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ "рд╡рдпрд╕реНрдХ" рдЖрд╡реЗрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХреЗ рдореЗрдиреВ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдмрдирд╛ рджреЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рднреА рд▓реЗрдЦ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рдХреИрдорд░реЗ рдХреА рдкрд╣рдЪрд╛рди рд╕рдВрдЦреНрдпрд╛ "1" рдФрд░ рдкреАрдЫреЗ "0" рд╣реИ (рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ), рдФрд░ рдпрд╣ рднреА рдХрд┐ 1920 x 1080 рдХрд╛ рд╕рдВрдХрд▓реНрдк рдФрд░ рдЬреЗрдкреАрдЬреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рд╣рдо рд╣рдорд▓реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред

рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реИ

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдореЗрдВ рдХрдИ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

  <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

рдкрд╣рд▓рд╛ рдХреИрдорд░рд╛ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд┐рддреНрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ (рдФрд░ рдпрд╣ рдмрд╛рд╣рд░реА рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рд╢рдмреНрдж рдХреЗ рдЕрд░реНрде рд╕реЗ рдкреНрд░рддреАрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреА рдЕрдкрдиреА рдореЗрдореЛрд░реА рд╣реИ)

рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рднреА рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд▓реЙрд▓реАрдкреЙрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рдХрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рдЕрдм рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреЗрди рдХреИрдорд░рд╛ рдЦреЛрд▓рдиреЗ рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреА рд╕рд╣рдорддрд┐ рдХреЛ рдордВрдЬреВрд░реА рджреЗред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); тАжтАж... if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ) { requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } тАж.. 

рд╕рд░рд▓рддрдо рдореЗрдВ рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдпреВрдЖрдИ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдРрд╕реА рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереНрд░реЗрдб рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдЕрдирд╛рдбрд╝реА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдХреЛ рджрдмрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреИрдорд░рд╛ рдЖрдЧреЗ рд╢реБрд░реВ рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдорддреМрд░ рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдбреЗрдореЛ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдХреЙрд▓рдмреИрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ:

 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == MY_REQUEST_CODE_FOR_CAMERA) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { startCameraActivity(); //     (  ) } } } 

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рдпрд╣ рд╕рдм рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдореИрдВрдиреЗ AsyncTask рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рднреА рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдЧрдврд╝рд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣реИред

рдХреИрдорд░рд╛ рдкрдХ рд░рд╣рд╛ рд╣реИ

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧреЛрдВ рдХреА рд╕рд▓рд╛рд╣ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдХреИрдорд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ рдФрд░ рдХреИрдорд░рд╛ рд╕рд░реНрд╡рд┐рд╕ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗред рд╡рд╣рд╛рдВ рд╣рдо рдХреИрдорд░реЛрдВ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЬрдЧрд╣ рджреЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдЙрди рд╕рднреА рдХреЙрд▓рдмреИрдХ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред

 тАж.. CameraService[] myCameras = null; private CameraManager mCameraManager = null; private final int CAMERA1 = 0; private final int CAMERA2 = 1; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); тАж.. } public class CameraService { private String mCameraID; private CameraDevice mCameraDevice = null; private CameraCaptureSession mCaptureSession; public CameraService(CameraManager cameraManager, String cameraID) { mCameraManager = cameraManager; mCameraID = cameraID; } public boolean isOpen() { if (mCameraDevice == null) { return false; } else { return true; } } public void openCamera() { try { if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { mCameraManager.openCamera(mCameraID,mCameraCallback,null); } } catch (CameraAccessException e) { Log.i(LOG_TAG,e.getMessage()); } } public void closeCamera() { if (mCameraDevice != null) { mCameraDevice.close(); mCameraDevice = null; } } } 

рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ, mCameraManager рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ myCameras рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдПрд░реЗ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВ - рд╕рд╛рдордиреЗ рдФрд░ рд╕реЗрд▓реНрдлреА рдХреИрдорд░реЗред

  mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try{ //      myCameras = new CameraService[mCameraManager.getCameraIdList().length]; for (String cameraID : mCameraManager.getCameraIdList()) { Log.i(LOG_TAG, "cameraID: "+cameraID); int id = Integer.parseInt(cameraID); //     myCameras[id] = new CameraService(mCameraManager,cameraID); } } catch(CameraAccessException e){ Log.e(LOG_TAG, e.getMessage()); e.printStackTrace(); } 

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдУрдкрдирдХреИрдорд░рд╛ () рд╡рд┐рдзрд┐ рдореЗрдВ, рдЖрдк рд▓рд╛рдЗрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

  mCameraManager.openCamera(mCameraID,mCameraCallback,null); 

рдпрд╣ рдпрд╣рд╛рдБ рд╕реЗ рд╣реИ рдХрд┐ рдкрде CameraDevice рдХреИрдорд░рд╛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдкрд╣рд▓реЗ рдХреЙрд▓рдмреИрдХ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ ред StateCallbackред рд╡рд╣ рд╣рдореЗрдВ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХреИрдорд░рд╛ рдЦреБрд▓рд╛ рд╣реИ, рдмрдВрдж рд╣реИ рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛ред рд╣рдо рдЗрд╕реЗ CameraService рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред

  private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; Log.i(LOG_TAG, "Open camera with id:"+mCameraDevice.getId()); createCameraPreviewSession(); } @Override public void onDisconnected(CameraDevice camera) { mCameraDevice.close(); Log.i(LOG_TAG, "disconnect camera with id:"+mCameraDevice.getId()); mCameraDevice = null; } @Override public void onError(CameraDevice camera, int error) { Log.i(LOG_TAG, "error! camera id:"+camera.getId()+" error:"+error); } }; 

рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдХреИрдорд░рд╛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп onOpened (CameraDevice рдХреИрдорд░рд╛) {} рд╡рд┐рдзрд┐ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ), рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрдЧреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, createCameraPreviewSession () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рдпрд╣ рд╣рдореЗрдВ рдХреИрдорд░реЗ рд╕реЗ рдЫрд╡рд┐ рдХреЛ рджреГрд╢реНрдп рдкрд░ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

CreateCameraPreviewSession

рдпрд╣рд╛рдВ рд╣рдо mImageView рдмрдирд╛рд╡рдЯ рдкрд░ рдПрдХ рдЫрд╡рд┐ (рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рддреБрдо рднреА рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдХрд┐рд╕ рд╕рдВрдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  private void createCameraPreviewSession() { SurfaceTexture texture = mImageView.getSurfaceTexture(); // texture.setDefaultBufferSize(1920,1080); Surface surface = new Surface(texture); try { final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.addTarget(surface); mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { mCaptureSession = session; try { mCaptureSession.setRepeatingRequest(builder.build(),null,null); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession session) { }}, null ); } catch (CameraAccessException e) { e.printStackTrace(); } } 

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

рдПрдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдПрдБ

рдЕрдм рд╣рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд░рдВрдЧреЛрдВ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рдФрд░ рд╢реИрд▓реА рдореЗрдВ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
"рддреАрди рд╕реНрдХреНрд░реАрди рдмрдЯрди рдФрд░ рдПрдХ рджреГрд╢реНрдпред"
 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextureView android:id="@+id/textureView" android:layout_width="356dp" android:layout_height="410dp" android:layout_marginTop="32dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.49" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:layout_width="292dp" android:layout_height="145dp" android:layout_marginStart="16dp" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textureView" app:layout_constraintVertical_bias="0.537"> <Button android:id="@+id/button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" " /> <Button android:id="@+id/button5" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" " /> <Button android:id="@+id/button6" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" " /> </LinearLayout> </androidx.constr 



рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдпрд╣рд╛рдВ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдШреВрдо рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдмрдЯрдиреЛрдВ рдХреЗ рдирд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЦрд░рд╛рдм рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рддрджрдиреБрд╕рд╛рд░, рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реА, рд╣рдо рд╢реНрд░реЛрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдмрдЯрди рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЛрддрд╛ред

  private Button mButtonOpenCamera1 = null; private Button mButtonOpenCamera2 = null; private Button mButtonToMakeShot = null; private TextureView mImageView = null; @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); тАжтАж... mButtonOpenCamera1 = findViewById(R.id.button1); mButtonOpenCamera2 = findViewById(R.id.button2); mButtonToMakeShot =findViewById(R.id.button3); mImageView = findViewById(R.id.textureView); mButtonOpenCamera1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].closeCamera(); if (myCameras[CAMERA1] != null) { if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera(); } } }); mButtonOpenCamera2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].closeCamera(); if (myCameras[CAMERA2] != null) { if (!myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].openCamera(); } } }); mButtonToMakeShot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //    } }); тАжтАж.. 

рдмрдЯрди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╛рдореЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рдмрдЯрди рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдФрд░ рдЕрдЧрд░ рдЖрдк рдЕрдм рдХреЛрдб рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рддреЗ рд╣реИрдВ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
 package com.example.camera; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.widget.Button; import java.util.Arrays; public class MainActivity extends AppCompatActivity { public static final String LOG_TAG = "myLogs"; CameraService[] myCameras = null; private CameraManager mCameraManager = null; private final int CAMERA1 = 0; private final int CAMERA2 = 1; private Button mButtonOpenCamera1 = null; private Button mButtonOpenCamera2 = null; private Button mButtonToMakeShot = null; private TextureView mImageView = null; @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(LOG_TAG, " "); if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ) { requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1); } mButtonOpenCamera1 = findViewById(R.id.button1); mButtonOpenCamera2 = findViewById(R.id.button2); mButtonToMakeShot =findViewById(R.id.button3); mImageView = findViewById(R.id.textureView); mButtonOpenCamera1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA2].isOpen()) {myCameras[CAMERA2].closeCamera();} if (myCameras[CAMERA1] != null) { if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera(); } } }); mButtonOpenCamera2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA1].isOpen()) {myCameras[CAMERA1].closeCamera();} if (myCameras[CAMERA2] != null) { if (!myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].openCamera(); } } }); mButtonToMakeShot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].makePhoto(); // if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].makePhoto(); } }); mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try{ //      myCameras = new CameraService[mCameraManager.getCameraIdList().length]; for (String cameraID : mCameraManager.getCameraIdList()) { Log.i(LOG_TAG, "cameraID: "+cameraID); int id = Integer.parseInt(cameraID); //     myCameras[id] = new CameraService(mCameraManager,cameraID); } } catch(CameraAccessException e){ Log.e(LOG_TAG, e.getMessage()); e.printStackTrace(); } } public class CameraService { private String mCameraID; private CameraDevice mCameraDevice = null; private CameraCaptureSession mCaptureSession; public CameraService(CameraManager cameraManager, String cameraID) { mCameraManager = cameraManager; mCameraID = cameraID; } private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; Log.i(LOG_TAG, "Open camera with id:"+mCameraDevice.getId()); createCameraPreviewSession(); } @Override public void onDisconnected(CameraDevice camera) { mCameraDevice.close(); Log.i(LOG_TAG, "disconnect camera with id:"+mCameraDevice.getId()); mCameraDevice = null; } @Override public void onError(CameraDevice camera, int error) { Log.i(LOG_TAG, "error! camera id:"+camera.getId()+" error:"+error); } }; private void createCameraPreviewSession() { SurfaceTexture texture = mImageView.getSurfaceTexture(); texture.setDefaultBufferSize(1920,1080); Surface surface = new Surface(texture); try { final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.addTarget(surface); mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { mCaptureSession = session; try { mCaptureSession.setRepeatingRequest(builder.build(),null,null); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession session) { }}, null ); } catch (CameraAccessException e) { e.printStackTrace(); } } public boolean isOpen() { if (mCameraDevice == null) { return false; } else { return true; } } public void openCamera() { try { if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { mCameraManager.openCamera(mCameraID,mCameraCallback,null); } } catch (CameraAccessException e) { Log.i(LOG_TAG,e.getMessage()); } } public void closeCamera() { if (mCameraDevice != null) { mCameraDevice.close(); mCameraDevice = null; } } } @Override public void onPause() { if(myCameras[CAMERA1].isOpen()){myCameras[CAMERA1].closeCamera();} if(myCameras[CAMERA2].isOpen()){myCameras[CAMERA2].closeCamera();} super.onPause(); } } 


рд╣рдо рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢реВрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реА рд╡рд┐рд╡рд┐рдзрддрд╛ рдЖ рд╕рдХрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдЬрд╛рдкрд╛рдиреА рдЯреЛрдорд╛рдХреА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ, рдПрдХ рд╕реБрдВрджрд░ рдЪрд┐рддреНрд░ рд▓рд╛ рд░рд╣рд╛ рд╣реИред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреИрдорд░реЗ рдХреЛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЗрд╕реЗ рдХрдИ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 CameraCaptureSession.StateCallback(). 

рддрдм рдХреИрдорд░рд╛ PRECAPTURE рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдХреИрдорд░рд╛ рдПрдХреНрд╕рдкреЛрдЬрд╝рд░, рд╡реНрд╣рд╛рдЗрдЯ рдмреИрд▓реЗрдВрд╕ рдФрд░ рдПрдкрд░реНрдЪрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ (рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдмрдЪрдкрди рдореЗрдВ рдХреНрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдЬреНрдЮрд╛рди рдЦреЛ рдЧрдпрд╛ рд╣реИ)ред рдХрднреА-рдХрднреА рдХреЛрдИ рдХреЙрд▓рдмреИрдХ рдПрдХ CONTROL_AE_STATE_FLASH_REQUIRED рдЕрдиреБрд░реЛрдз рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ "рдлрд╝реНрд▓реИрд╢ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред" рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - setAutoFlash (mPreviewRequestBuilder)ред

рдЬрдм рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓рдмреИрдХ рд░рд╛рдЬреНрдп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ CONTROL_AE_STATE_CONVERGED рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреИрдорд░рд╛ рдПрдХ рддрд╕реНрд╡реАрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдЧреЛрдЧреНрд▓реЙрдЗрдб рдкреГрд╖реНрда рдкрд░, рдпрд╣ рд╕рдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрди рдорд╛рдЗрдирдлреАрд▓реНрдбреНрд╕ рдФрд░ рд╡рд╛рдпрд░ рдмрд╛рдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдзреИрд░реНрдп рд╣реИ, рддреЛ рд╕рдореНрдорд╛рди рдФрд░ рдкреНрд░рд╢рдВрд╕рд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИред

рдЪрд┐рддреНрд░ рд▓реЗрдВ рдФрд░ рдЪрд┐рддреНрд░ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд╣рд╛рдБ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрдиреЗ рд▓рдЧреАрдВред , - ( , ) . , . CamerCaptureSession Surface, ImageReader.

, ImageReader . OnImageAvailableListener. , ImageSaver , ImageSaver Runnable.

, ImageReader, CameraCaptureSession.StateCallback() . Android . ( ) createCameraPreviewSession(), .

:

 private void createCameraPreviewSession() { SurfaceTexture texture = mImageView.getSurfaceTexture(); Surface surface = new Surface(texture); try { final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.addTarget(surface); mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() тАжтАж. 

:

  private ImageReader mImageReader; private void createCameraPreviewSession() { mImageReader = ImageReader.newInstance(1920,1080,ImageFormat.JPEG,1); mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null); SurfaceTexture texture = mImageView.getSurfaceTexture(); Surface surface = new Surface(texture); try { final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.addTarget(surface); mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()), new CameraCaptureSession.StateCallback() тАжтАж 

, ImageReader , . - surface, mImageReader.getSurface() . тАж

┬л ┬╗. makePhoto() ( ):

  mButtonToMakeShot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].makePhoto(); if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].makePhoto(); } }); тАжтАж public class CameraService { public void makePhoto (){ try { // This is the CaptureRequest.Builder that we use to take a picture. final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); captureBuilder.addTarget(mImageReader.getSurface()); CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) { } }; mCaptureSession.stopRepeating(); mCaptureSession.abortCaptures(); mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null); } catch (CameraAccessException e) { e.printStackTrace(); } } 

OnImageAvailableListener:

  private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { { Toast.makeText(MainActivity.this,"   ", Toast.LENGTH_SHORT).show();} } }; 

, , , , .

:

 public class CameraService { private File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "test1.jpg");; 

ImageSaver, , .

Runnable. MainActivity:

  private static class ImageSaver implements Runnable { private final File mFile; ImageSaver(Image image, File file) { mImage = image; mFile = file; } @Override public void run() { ByteBuffer buffer = mImage.getPlanes()[0].getBuffer(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); FileOutputStream output = null; try { output = new FileOutputStream(mFile); output.write(bytes); } catch (IOException e) { e.printStackTrace(); } finally { mImage.close(); if (null != output) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 

, OnImageAvailableListener :

 mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile)); 

WAIT! OH, SHIT!!

mBackgroundHandler??? .

тАФ ? , BackgroundHandler BackgroundThread, . Activity :

  private HandlerThread mBackgroundThread; private Handler mBackgroundHandler = null; private void startBackgroundThread() { mBackgroundThread = new HandlerThread("CameraBackground"); mBackgroundThread.start(); mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); } private void stopBackgroundThread() { mBackgroundThread.quitSafely(); try { mBackgroundThread.join(); mBackgroundThread = null; mBackgroundHandler = null; } catch (InterruptedException e) { e.printStackTrace(); } } 

, BackgroundThread :

  public void onPause() { super.onPause(); stopBackgroundThread(); } @Override public void onResume() { super.onResume(); startBackgroundThread(); } 

mBackgroundHandler, , handler , , null.

, , . . onPause() onResume(). - .

. . , .



- , .

 package com.example.camera; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.ImageFormat; import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.TotalCaptureResult; import android.media.Image; import android.media.ImageReader; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; import android.util.Log; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.util.Arrays; public class MainActivity extends AppCompatActivity { public static final String LOG_TAG = "myLogs"; CameraService[] myCameras = null; private CameraManager mCameraManager = null; private final int CAMERA1 = 0; private final int CAMERA2 = 1; private Button mButtonOpenCamera1 = null; private Button mButtonOpenCamera2 = null; private Button mButtonToMakeShot = null; private TextureView mImageView = null; private HandlerThread mBackgroundThread; private Handler mBackgroundHandler = null; private void startBackgroundThread() { mBackgroundThread = new HandlerThread("CameraBackground"); mBackgroundThread.start(); mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); } private void stopBackgroundThread() { mBackgroundThread.quitSafely(); try { mBackgroundThread.join(); mBackgroundThread = null; mBackgroundHandler = null; } catch (InterruptedException e) { e.printStackTrace(); } } @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(LOG_TAG, " "); if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ) { requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1); } mButtonOpenCamera1 = findViewById(R.id.button1); mButtonOpenCamera2 = findViewById(R.id.button2); mButtonToMakeShot =findViewById(R.id.button3); mImageView = findViewById(R.id.textureView); mButtonOpenCamera1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA2].isOpen()) {myCameras[CAMERA2].closeCamera();} if (myCameras[CAMERA1] != null) { if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera(); } } }); mButtonOpenCamera2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA1].isOpen()) {myCameras[CAMERA1].closeCamera();} if (myCameras[CAMERA2] != null) { if (!myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].openCamera(); } } }); mButtonToMakeShot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].makePhoto(); if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].makePhoto(); } }); mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try{ //      myCameras = new CameraService[mCameraManager.getCameraIdList().length]; for (String cameraID : mCameraManager.getCameraIdList()) { Log.i(LOG_TAG, "cameraID: "+cameraID); int id = Integer.parseInt(cameraID); //     myCameras[id] = new CameraService(mCameraManager,cameraID); } } catch(CameraAccessException e){ Log.e(LOG_TAG, e.getMessage()); e.printStackTrace(); } } public class CameraService { private File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "test1.jpg");; private String mCameraID; private CameraDevice mCameraDevice = null; private CameraCaptureSession mCaptureSession; private ImageReader mImageReader; public CameraService(CameraManager cameraManager, String cameraID) { mCameraManager = cameraManager; mCameraID = cameraID; } public void makePhoto (){ try { // This is the CaptureRequest.Builder that we use to take a picture. final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); captureBuilder.addTarget(mImageReader.getSurface()); CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) { } }; mCaptureSession.stopRepeating(); mCaptureSession.abortCaptures(); mCaptureSession.capture(captureBuilder.build(), CaptureCallback, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile)); } }; private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; Log.i(LOG_TAG, "Open camera with id:"+mCameraDevice.getId()); createCameraPreviewSession(); } @Override public void onDisconnected(CameraDevice camera) { mCameraDevice.close(); Log.i(LOG_TAG, "disconnect camera with id:"+mCameraDevice.getId()); mCameraDevice = null; } @Override public void onError(CameraDevice camera, int error) { Log.i(LOG_TAG, "error! camera id:"+camera.getId()+" error:"+error); } }; private void createCameraPreviewSession() { mImageReader = ImageReader.newInstance(1920,1080, ImageFormat.JPEG,1); mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null); SurfaceTexture texture = mImageView.getSurfaceTexture(); texture.setDefaultBufferSize(1920,1080); Surface surface = new Surface(texture); try { final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.addTarget(surface); mCameraDevice.createCaptureSession(Arrays.asList(surface,mImageReader.getSurface()), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { mCaptureSession = session; try { mCaptureSession.setRepeatingRequest(builder.build(),null,mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession session) { }}, mBackgroundHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } public boolean isOpen() { if (mCameraDevice == null) { return false; } else { return true; } } public void openCamera() { try { if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { mCameraManager.openCamera(mCameraID,mCameraCallback,mBackgroundHandler); } } catch (CameraAccessException e) { Log.i(LOG_TAG,e.getMessage()); } } public void closeCamera() { if (mCameraDevice != null) { mCameraDevice.close(); mCameraDevice = null; } } } @Override public void onPause() { if(myCameras[CAMERA1].isOpen()){myCameras[CAMERA1].closeCamera();} if(myCameras[CAMERA2].isOpen()){myCameras[CAMERA2].closeCamera();} stopBackgroundThread(); super.onPause(); } @Override public void onResume() { super.onResume(); startBackgroundThread(); } private static class ImageSaver implements Runnable { /** * The JPEG image */ private final Image mImage; /** * The file we save the image into. */ private final File mFile; ImageSaver(Image image, File file) { mImage = image; mFile = file; } @Override public void run() { ByteBuffer buffer = mImage.getPlanes()[0].getBuffer(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); FileOutputStream output = null; try { output = new FileOutputStream(mFile); output.write(bytes); } catch (IOException e) { e.printStackTrace(); } finally { mImage.close(); if (null != output) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } 

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


All Articles