package Ġcom . mo hang . inst ad own load . inst ad own loader . inst ad own loader Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ Ċ import Ġcom . mo hang . inst ad own load . inst ad own loader . Clip Board Service Ċ import Ġcom . mo hang . inst ad own load . inst ad own loader . R Ċ Ċ class ĠInst a Downloader Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ inst a _ downloader ) ĊĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠClip Board Service :: class . java )) ĊĠĠĠĠĠĠĠ Ġask Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġrequest Ġis Ġcancelled , Ġthe Ġresult Ġarrays Ġare Ġempty . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĠDo Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontacts - related Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Download () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , e . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" permission Ġdenied "," Ġhere Ġ"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfunctionality Ġthat Ġdepends Ġon Ġthis Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġother Ġ' when ' Ġlines Ġto Ġcheck Ġfor Ġother ĊĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġthis Ġapp Ġmight Ġrequest . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġall Ġother Ġrequests . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġask Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHere , Ġthis Activity Ġis Ġthe Ġcurrent Ġactivity ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġis Ġnot Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġwe Ġshow Ġan Ġexplanation ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" came Ġ Ġ-------------- ", Ġ" here ĠĠ Ġ---------- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġan Ġexplanation Ġto Ġthe Ġuser Ġ* as ynchronously * Ġ-- Ġdon 't Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġthread Ġwaiting Ġfor Ġthe Ġuser 's Ġresponse ! ĠAfter Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsees Ġthe Ġexplanation , Ġtry Ġagain Ġto Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexplanation Ġneeded , Ġwe Ġcan Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMY _ PERMISSION S _ REQUEST _ READ _ CONTACT S Ġis Ġan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapp - defined Ġint Ġconstant . ĠThe Ġcallback Ġmethod Ġgets Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresult Ġof Ġthe Ġrequest . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ