前提・実現したいこと
連絡先から電話番号を取得して、テキストに表示する
発生している問題・エラーメッセージ
val phoneCurssor = contentResolver.queryのところでシャットダウンしてしまいます。
パーミッション設定済みです。
<uses-permission android:name="android.permission.READ_CONTACTS" />
D/AndroidRuntime: Shutting down VM
該当のソースコード
kotlin
1import android.app.Activity 2import android.content.Intent 3import android.os.Bundle 4import android.provider.ContactsContract 5import android.util.Log 6import android.widget.Button 7import android.widget.TextView 8 9class MainActivity : Activity() { 10 private val textName: TextView? = null 11 private val textPhoneNumber: TextView? = null 12 private val buttonGetPhoneNumber: Button? = null 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main) 16 } 17 18 override fun onResume() { 19 super.onResume() 20 // 電話帳アプリのURIは標準APIで定数で提供されている 21 val intent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI) 22 startActivityForResult(intent, REQUEST_CODE_PHONE_NUMBER) 23 } 24 25 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { 26 if (requestCode != REQUEST_CODE_PHONE_NUMBER) { // 一応、チェック 27 return 28 } 29 var phoneNumbers = arrayOfNulls<String>(0) 30 val contentResolver = contentResolver 31 val cursor = contentResolver.query(data.data!!, null, null, null, null) 32 var id = "" 33 var name: String? = "" 34 if (cursor!!.moveToFirst()) { 35 // 1.選択された人のidの取得 36 id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)) 37 // 2.選択された人の名前の取得 38 name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) 39 // 3.選択された人の電話番号をすべて取得 40 val phoneCurssor = contentResolver.query( 41 ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 42 null, 43 null, 44 null, 45 null) 46 if (phoneCurssor!!.moveToFirst()) { 47 phoneNumbers = arrayOfNulls(phoneCurssor.count) 48 var count = 0 49 do { 50 phoneNumbers[count] = phoneCurssor.getString( 51 phoneCurssor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)) 52 count++ 53 } while (phoneCurssor.moveToNext()) 54 } 55 phoneCurssor.close() 56 } 57 cursor.close() 58 59 // 電話帳から取得した電話帳の名前 60 Log.v("Contactsから取得した電話帳の名前", name) 61 if (phoneNumbers.size > 0) { 62 // 電話帳から取得した電話番号 63 Log.v("Contactsから取得した電話番号", phoneNumbers[0]) 64 } 65 } 66 67 companion object { 68 // リクエストコード 69 private const val REQUEST_CODE_PHONE_NUMBER = 0 70 } 71}
あなたの回答
tips
プレビュー