onActivityResult не вызывается для чтения контактов - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь прочитать и отобразить контакт в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...