安卓读取,添加,更新,删除联系人,读取短信

目录

读取联系人

添加联系人

更新联系人

删除联系人

读取短信


读取联系人

安卓可以通过contentResolver来读取联系人表,联系人表的Uri信息是:content://com.android.contacts/data/phones 从而输出联系人信息,

需要相关权限:

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

具体代码如下:

    //需要读联系人权限READ_CONTACTS
    @SuppressLint("Range")
    private fun getContact() {
        //查询raw_contacts表获得联系人
        val resolver = contentResolver
        val uri = Uri.parse("content://com.android.contacts/data/phones")
        //查询联系人
        val cursor = resolver.query(uri, null, null, null, null)
        while (cursor!!.moveToNext()) {
            val name =
                cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
            val number =
                cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
            Log.d(TAG, "联系人:${name}")
            Log.d(TAG, "电话:${number}")
        }
        cursor.close()
    }

输出结构如下:

//2023-08-06 17:29:50.535 31719-31719 MainActivity2           com.example.myapplication            D  联系人:张三
//2023-08-06 17:29:50.535 31719-31719 MainActivity2           com.example.myapplication            D  电话:1 (883) 22
//2023-08-06 17:29:50.535 31719-31719 MainActivity2           com.example.myapplication            D  联系人:si li
//2023-08-06 17:29:50.535 31719-31719 MainActivity2           com.example.myapplication            D  电话:10020
//2023-08-06 17:29:50.535 31719-31719 MainActivity2           com.example.myapplication            D  联系人:bo xiao
//2023-08-06 17:29:50.535 31719-31719 MainActivity2           com.example.myapplication            D  电话:10086

添加联系人

同理,使用contentResolver。需要写联系人权限

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

具体代码如下:

    private fun insertContact() {
        val resolver = contentResolver
        val values = ContentValues()
        //向raw_contacts表插入空数据,拿到uri
        val uri = resolver.insert(ContactsContract.RawContacts.CONTENT_URI,values)
        //拿到表id
        val id = uri?.let { ContentUris.parseId(it) }
        //插入姓名
        values.clear()
        //put id
        values.put(ContactsContract.Data.RAW_CONTACT_ID,id)
        //put type
        values.put(ContactsContract.Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE)
        //put 值
        values.put(StructuredName.GIVEN_NAME,"xiaohong")
        resolver.insert(ContactsContract.Data.CONTENT_URI,values)

        //插入手机号
        values.clear()
        //put id
        values.put(ContactsContract.Data.RAW_CONTACT_ID,id)
        //put type
        values.put(ContactsContract.Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
        //put 值
        values.put(Phone.NUMBER,"15541383234")
        values.put(Phone.TYPE,Phone.TYPE_MOBILE)
        resolver.insert(ContactsContract.Data.CONTENT_URI,values)

        //插入邮箱
        values.clear()
        //put id
        values.put(ContactsContract.Data.RAW_CONTACT_ID,id)
        //put type
        values.put(ContactsContract.Data.MIMETYPE,Email.CONTENT_ITEM_TYPE)
        //put 值
        values.put(Email.DATA,"163@qq.com")
        values.put(Email.TYPE,Email.TYPE_WORK)
        resolver.insert(ContactsContract.Data.CONTENT_URI,values)
    }

运行结果如下:

更新联系人

这里我们是根据手机号码先获取联系人表id,也仅有这种方式,获取id

    @SuppressLint("Range")
    private fun getContactByPhone(phone: Long): String? {
        val resolver = contentResolver
        val uri = Uri.parse("content://com.android.contacts/data/phones/filter/$phone")
        val cursor= resolver.query(uri, arrayOf(ContactsContract.Data.CONTACT_ID),null,null,null)
        return if (cursor!!.moveToNext()){
            val id = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID))
            cursor.close()
            id
        }else{
            null
        }
    }

拿到ContactId后,去更新数据

    //根据手机号更新
    @SuppressLint("SuspiciousIndentation")
    private fun updateContact() {
    val id  = getContactByPhone(15541383234)
        if(id!=null){
            val values = ContentValues()
            val resolver = contentResolver
            values.put(ContactsContract.Data.MIMETYPE,CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
            values.put(CommonDataKinds.StructuredName.GIVEN_NAME,"xiaohong_update")
            resolver.update(ContactsContract.Data.CONTENT_URI, values,"${ContactsContract.Data.CONTACT_ID}=?",
                arrayOf(id)
            )
        }
    }

删除联系人

删除联系人,比较简单,我们可以通过联系人名字,删除

    private fun deteleContact() {
        val resolver = contentResolver
        //根据联系人删除
        val ret = resolver.delete(RawContacts.CONTENT_URI, CommonDataKinds.Phone.DISPLAY_NAME+"=?",
            arrayOf("si li")
        )
        if(ret > 0){
            Toast.makeText(this, "删除成功", Toast.LENGTH_LONG).show()
        }
    }

也可以根据联系人手机号删除,具体代码如下:

    private fun deteleContact() {
        val resolver = contentResolver
        //根据手机号删除
         val id = getContactByPhone(10020)
         val ret = resolver.delete(RawContacts.CONTENT_URI, CommonDataKinds.Phone.CONTACT_ID+"=?",
            arrayOf(id)
         )
        if(ret > 0){
            Toast.makeText(this, "删除成功", Toast.LENGTH_LONG).show()
        }
    }

读取短信

除此,我们还可以通过contentResolver读取短信信息,短信表的uri信息content://sms/

用途比如验证码快捷输入,像ios短信验证码快速copy到输入框。

下面看看任何实现

第一,读取短信信息,需要权限:

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

具体代码如下;

    private fun getMsgs() {
        val uri = Uri.parse("content://sms/")
        val resolver = contentResolver
        val  cursor =resolver.query(uri, arrayOf("address","date","type","body"),null,
        null,null)
        while (cursor!!.moveToNext()){
            val  address = cursor.getString(0)
            val  date = cursor.getString(1)
            val  type = cursor.getString(2)
            val  body = cursor.getString(3)
            Log.d(TAG,"address:${address},date:${date},type:${type},body:${body}")
        }
        cursor.close()
    }

下面是一些表的uri信息:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,以下是安卓读取短信的实验报告: 实验名称:安卓读取短信实验 实验目的:通过实现安卓应用的读取短信功能,学习安卓应用开发中的权限管理和短信读取等基本操作。 实验步骤: 1. 创建一个新的安卓项目。 2. 在项目中创建一个界面,用于显示读取到的短信。 3. 在应用中添加短信读取权限。在AndroidManifest.xml文件中添加以下代码: ``` <uses-permission android:name="android.permission.READ_SMS" /> ``` 4. 在应用中添加读取短信的代码。通过ContentResolver获取短信的Uri,然后通过Cursor读取短信的内容,最后将短信的内容显示到界面上。 ``` Uri uriSMS = Uri.parse("content://sms/inbox"); Cursor cursor = getContentResolver().query(uriSMS, null, null, null, null); if (cursor.moveToFirst()) { do { String address = cursor.getString(cursor.getColumnIndex("address")); String body = cursor.getString(cursor.getColumnIndexOrThrow("body")); // 将短信的内容显示到界面上 ... } while (cursor.moveToNext()); } cursor.close(); ``` 5. 在应用中添加权限管理功能。当用户第一次运行应用时,应用将请求读取短信的权限,用户可以选择允许或拒绝。 实验结果: 经过实验,我们成功实现了安卓应用的读取短信功能,并通过权限管理保护了用户的隐私和安全。同时,我们还可以将读取到的短信内容显示到界面上,提高了应用的功能和用户体验。 结论: 通过本次实验,我们学习了安卓应用开发中的权限管理和短信读取等基本操作,掌握了安卓应用的读取短信功能的实现方法。同时,我们还发现,在实际开发中,要注意保护用户的隐私和安全,避免用户信息泄露的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunbofiy23

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值