{"id":174,"date":"2020-03-16T16:41:23","date_gmt":"2020-03-16T08:41:23","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=174"},"modified":"2020-11-24T14:15:15","modified_gmt":"2020-11-24T06:15:15","slug":"util-%e6%8a%93%e5%8f%96%e6%89%8b%e6%a9%9f%e6%89%80%e6%9c%89%e8%81%af%e7%b5%a1%e4%ba%ba","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/util-%e6%8a%93%e5%8f%96%e6%89%8b%e6%a9%9f%e6%89%80%e6%9c%89%e8%81%af%e7%b5%a1%e4%ba%ba\/","title":{"rendered":"Android \u7372\u53d6\u624b\u6a5f\u806f\u7d61\u4eba"},"content":{"rendered":"<h4>1.\u806f\u7d61\u4eba\u6b0a\u9650<\/h4>\n<pre><code class=\"language-XML line-numbers\">&lt;uses-permission android:name=\"android.permission.READ_CONTACTS\"\/&gt;\n<\/code><\/pre>\n<h4>2.\u806f\u7d61\u4eba\u5de5\u5177\u985e<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">import android.content.ContentResolver\nimport android.net.Uri\nimport android.provider.ContactsContract\n\nobject ContactUtil {\n\n    \/\/\u7372\u53d6\u6240\u6709\u806f\u7d61\u4eba\n    fun getContacts(contentResolver: ContentResolver): List&lt;Contact&gt;? {\n        val contacts = ArrayList&lt;Contact&gt;()\n        val uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI\n        val projection = arrayOf(\n            ContactsContract.CommonDataKinds.Phone.NUMBER,\n            ContactsContract.Contacts.DISPLAY_NAME\n        )\n        try {\n            contentResolver.query(uri, projection, null, null, null).use { cursor -&gt;\n                var phoneNum: String\n                var name: String\n                cursor?.apply {\n                    if (count &gt; 0) {\n                        while (moveToNext()) {\n                            phoneNum =\n                                getString(getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))\n                            name =\n                                getString(getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))\n                            phoneNum = phoneNum.replace(\"^(\\\\+886)\".toRegex(), \"0\")\n                            phoneNum = phoneNum.replace(\"^(886)\".toRegex(), \"0\")\n                            phoneNum = phoneNum.replace(\"-\".toRegex(), \"\")\n                            phoneNum = phoneNum.replace(\" \".toRegex(), \"\")\n                            phoneNum = phoneNum.trim { it &lt;= ' ' }\n                            val contact = Contact(name,phoneNum)\n                            contacts.add(contact)\n                        }\n                    }\n                }\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n        return contacts\n    }\n\n    \/\/\u95dc\u9375\u5b57\u904e\u6ffe\n    fun getFilterData(filter: String?, contentResolver: ContentResolver): List&lt;Contact&gt;? {\n        val contacts = ArrayList&lt;Contact&gt;()\n        val uri =\n            Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, filter)\n        val projection = arrayOf(\n            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,\n            ContactsContract.CommonDataKinds.Phone.NUMBER\n        )\n        try {\n            contentResolver.query(uri, projection, null, null, null).use { cursor -&gt;\n                var phoneNum: String\n                var name: String\n                cursor?.apply {\n                    if (count &gt; 0) {\n                        while (moveToNext()) {\n                            phoneNum =\n                                getString(getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))\n                            name =\n                                getString(getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))\n                            phoneNum = phoneNum.replace(\"^(\\\\+886)\".toRegex(), \"0\")\n                            phoneNum = phoneNum.replace(\"^(886)\".toRegex(), \"0\")\n                            phoneNum = phoneNum.replace(\"-\".toRegex(), \"\")\n                            phoneNum = phoneNum.replace(\" \".toRegex(), \"\")\n                            phoneNum = phoneNum.trim { it &lt;= ' ' }\n                            val contact = Contact(name, phoneNum)\n                            contacts.add(contact)\n                        }\n                    }\n                }\n            }\n        } catch (e: java.lang.Exception) {\n            e.printStackTrace()\n        }\n        return contacts\n    }\n\n    data class Contact(var name: String, var phone: String)\n}\n\n<\/code><\/pre>\n<h4>3.\u6548\u679c\u5c55\u793a<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">    private val READ_CONTACT_REQUEST = 40\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {\n            requestPermissions(arrayOf(Manifest.permission.READ_CONTACTS), READ_CONTACT_REQUEST)\n        } else {\n            getContact()\n        }\n    }\n\n    private fun getContact() {\n        val contacts = ContactUtil.getContacts(contentResolver)\n        contacts?.also {\n            contact -&gt;\n            for (index in contact.indices) {\n                val name = contact[index].name\n                val phone = contact[index].phone\n            }\n        }\n    }\n\n    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array&lt;out String&gt;, grantResults: IntArray) {\n        super.onRequestPermissionsResult(requestCode, permissions, grantResults)\n        if (requestCode == READ_CONTACT_REQUEST &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n            getContact()\n        }\n    }\n<\/code><\/pre>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>1.\u806f\u7d61\u4eba\u6b0a\u9650 &lt;uses-permission android:name=&#8221;android.permi &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[9],"tags":[13,146,15,16],"class_list":["post-174","post","type-post","status-publish","format-standard","hentry","category-util","tag-android","tag-contact","tag-kotlin","tag-util"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=174"}],"version-history":[{"count":9,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/174\/revisions"}],"predecessor-version":[{"id":930,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/174\/revisions\/930"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}