0.前言

想取得手機裡的 聯絡人資訊 照片 相機啟用功能 麥克風啟用功能 …. 等等 都需要透過使用這的同意才能取得

1.準備

此範例為取得 聯絡人清單 和 使用者圖片檔

AndroidManifest.xml 加入權限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>

2.Code

  • 寫權限要求
  • query 標示  table 名稱
  • 從cursor取得資料用 欄位名稱

MainActivity.kt

ActivityCompat

  • checkSelfPermission(activity,Permission)
  • requestPermission(this, arryPermission , RequestCode)

check  permission

val contactPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
            val imagePermission = ActivityCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)

            if (
                contactPermission != PackageManager.PERMISSION_GRANTED ||
                imagePermission != PackageManager.PERMISSION_GRANTED
                    ){
                ActivityCompat.requestPermissions(this,
                    arrayOf(
                        Manifest.permission.READ_CONTACTS,
                        Manifest.permission.READ_EXTERNAL_STORAGE
                         ),
                    RC_PERMISSION)
            }else{
                toGetData()
            }

 

Override “onRequestPermissionsResult” function

if granted , to do something

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == RC_PERMISSION){
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                toGetData()
            }
        }
    }

 

toGetData()

query uri

  • Phone : ContactsContract.Contacts.CONTENT_URI
  • Photo : MediaStore.Images.Media.EXTERNAL_CONTENT

another parameters are null

use let block when if not null

Phone

  • id : it.getString(it.getColumnIndex(ContactsContract.Contacts._ID))
  • name : it.getString(it.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))

Photo

  • path : it.getString(it.getColumnIndex(MediaStore.Images.Media.DATA))
private fun toGetData() {
        Log.d(TAG, "toGetData: Contacts")
        var cursor = contentResolver.query(
            ContactsContract.Contacts.CONTENT_URI,null,null,null,null
        )
        cursor?.let {
            while (it.moveToNext()){
                val id = it.getString(it.getColumnIndex(ContactsContract.Contacts._ID))
                val name = it.getString(it.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
                Log.d(TAG, "toGetData: contacts :  id = $id  / name = $name")
            }
        }
        Log.d(TAG, "toGetData: Images")
        var imageCursor = contentResolver.query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,null,null,null
        )
        imageCursor?.let {
            while (it.moveToNext()){
                val path = it.getString(it.getColumnIndex(MediaStore.Images.Media.DATA))
                Log.d(TAG, "toGetData: Image $path")
            }
        }



    }

3.Result

 

Reference : https://developer.android.com/training/permissions/requesting

4.Git

https://github.com/encorex32268/blogthing/tree/master/PermissionAsk

 

 

 

最後修改日期: 2019-05-15 21:17:00

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料