代码之家  ›  专栏  ›  技术社区  ›  Stefano Mtangoo

未调用OnActivityResult以读取联系人

  •  0
  • Stefano Mtangoo  · 技术社区  · 6 年前

    我正在尝试在textview上读取和显示联系人。问题是,我可以启动“联系人”活动并选择联系人。之后,父活动(启动的联系人活动)将消失。你知道它为什么不工作吗?

    class MainActivity : AppCompatActivity() {
        val REQUEST_CONTACT = 1000
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            takeContact.setOnClickListener {
                if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
                    launchContactPicker()
    
                } else {
                    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {
                    } else {
                        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_CONTACTS), REQUEST_CONTACT)
                    }
    
                }
            }
        }
    
        override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
            when (requestCode) {
                REQUEST_CONTACT -> {
                    if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                        launchContactPicker()
                    } else {
                        Toast.makeText(this, "Permission denied. You can't read contacts!", Toast.LENGTH_LONG).show()
                    }
                    return
                }
            }
        }
    
        private fun launchContactPicker() {
            Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI).also { intent ->
                intent.resolveActivity(packageManager)?.also {
                    startActivityForResult(intent, REQUEST_CONTACT)
                }
            }
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
            if (requestCode == REQUEST_CONTACT && resultCode == RESULT_OK) {
                val uri = data.data as Uri
                val projection = arrayOf(ContactsContract.CommonDataKinds.Phone.NUMBER)
                val cursor = contentResolver.query(uri, projection, null, null, null)
                if (cursor != null && cursor.moveToFirst()) {
                    val phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
                    val nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
    
                    val number = cursor.getString(phoneIdx)
                    val name = cursor.getString(nameIdx)
                    val contact = "$name\n$number"
    
                    selectedContact.text = contact
    
                }
    
                cursor.close()
            }
        }
    }
    

    我也查过调试器 onActivityResult 无法访问。我已经在android 6上测试过了。

    0 回复  |  直到 6 年前