package Ġcn . nie king . cam er ade mo Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . hardware . camera 2 . Camera Character istics Ċ import Ġandroid . hardware . camera 2 . Camera Device Ċ import Ġandroid . hardware . camera 2 . Camera Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Message Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġcom . t br uy elle . rx permissions 2 . Rx Permissions Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ /** Ċ Ġ* ĠCamera 2 Demo Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Rx Permissions Ġby Ġlazy Ġ{ ĠRx Permissions ( this ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Camera Manager Ġby Ġlazy Ġ{ Ġget System Service ( Context . CAMERA _ SERVICE ) Ġas ĠCamera Manager Ġ} ĊĠĠĠ Ġprivate Ġvar Ġm Info Text : ĠStringBuffer Ġ= ĠStringBuffer ("") ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġm Rx Permissions . request ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġgranted Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gr anted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Camera 2 ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin quire Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" æĿĥéĻĲ è¢« æĭ Ĵ ç»Ŀ ï¼ģ ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĵå¼Ģ çĽ¸ æľº ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġopen Camera () Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġm Camera Manager . open Camera ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera Manager . camera IdList [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠCamera Device . State Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Opened ( camera : ĠCamera Device ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ çĽ¸ æľº è®¾å¤ĩ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Camera Device Ġ= Ġcamera ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected ( camera : ĠCamera Device ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ³éĹŃ çĽ¸ æľº è®¾å¤ĩ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( camera : ĠCamera Device ?, Ġerror : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CAMERA ", Ġerror . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŁ¥è¯¢ çĽ¸ æľº ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġin quire Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . èİ·åıĸ çĽ¸ æľº ç®¡çĲĨ åĻ¨ Ċ // ĠĠĠĠĠĠĠ Ġval Ġm Camera Manager Ġ= Ġget System Service ( android . content . Context . CAMERA _ SERVICE ) Ġas ĠCamera Manager ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . èİ·åıĸ çĽ¸ æľº åĪĹè¡¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġm Camera Manager . camera IdList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 . èİ·åıĸ çĽ¸ æľº æķ°éĩı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Of Cam eras Ġ= Ġids . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . èİ·åıĸ æ¯ıä¸ª ĠID Ġ å¯¹åºĶçļĦ éķľ å¤´ åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġids ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å½ĵåīį id å¯¹åºĶçļĦ éķľ å¤´ è®¾å¤ĩ åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristics Ġ= Ġm Camera Manager . get Camera Character istics ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å½ĵåīį éķľ å¤´ æľ Ŀ åĲĳ ï¼Ī éķľ å¤´ æľ Ŀ åĲĳ æĺ¯ è§Ĵ åº¦ æķ° åĢ¼ ï¼Į åį³ ä¸İ å±ı å¹ķ æīĢ æĪĲ è§Ĵ åº¦ ï¼Į åīį ç½® 9 0 ï¼Į åĲİ ç½® 2 7 0 ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġcharacteristics . get ( Camera Character istics . LEN S _ F ACING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ å½ĵåīį éķľ å¤´ æĺ¯ åīį ç½® éķľ å¤´ è¿ĺæĺ¯ åĲİ ç½® éķľ å¤´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠCamera Character istics . LEN S _ F ACING _ FRONT ) Ġ{ Ġ// Ġ åīį ç½® éķľ å¤´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åīį ç½® éķľ å¤´ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface Front Camera Id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åīį ç½® éķľ å¤´ æĸ¹åĲĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface Front Camera Orientation Ġ= Ġcharacteristics . get ( Camera Character istics . SENSOR _ OR IENTATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åīį ç½® éķľ å¤´ åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfront Camera Character istics Ġ= Ġcharacteristics ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Info Text . append ("\ n $ face Front Camera Id \ n $ face Front Camera Orientation \ n $ front Camera Character istics \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġ åĲİ ç½® éķľ å¤´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲİ ç½® éķľ å¤´ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface back Camera Id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲİ ç½® éķľ å¤´ æĸ¹åĲĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġface back Camera Orientation Ġ= Ġcharacteristics . get ( Camera Character istics . SENSOR _ OR IENTATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲİ ç½® éķľ å¤´ åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġback Camera Character istics Ġ= Ġcharacteristics ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Info Text . append ("\ n $ face back Camera Id \ n $ face back Camera Orientation \ n $ back Camera Character istics \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Info Tv . text Ġ= Ġm Info Text . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ æĶ¯æĮģ ĠCamera 2 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġhas Camera 2 ( context : ĠContext ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Camera Manager Ġ= Ġcontext . getSystem Service ( Context . CAMERA _ SERVICE ) Ġas ĠCamera Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid List Ġ= Ġm Camera Manager . camera IdList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnot Full Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Full Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( str Ġin Ġid List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str Ġ== Ġnull Ġ|| Ġstr . trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Full Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristics Ġ= Ġm Camera Manager . get Camera Character istics ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupport Level Ġ= Ġcharacteristics . get ( Camera Character istics . INFO _ SUPPORTED _ HARD WARE _ LEVEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support Level Ġ== ĠCamera Character istics . INFO _ SUPPORTED _ HARD WARE _ LEVEL _ LEG ACY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Full Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnot Full ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ