首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获取短信对话/主题列表?并在ListView中显示联系人的姓名?

获取短信对话/主题列表并在ListView中显示联系人的姓名,可以通过以下步骤实现:

  1. 获取短信对话/主题列表:
    • 使用Android的ContentResolver对象查询短信数据库,获取短信对话列表。
    • 使用Cursor对象遍历查询结果,获取每个对话的相关信息,如对方手机号码、最后一条短信的内容和时间等。
  • 在ListView中显示联系人的姓名:
    • 根据对方手机号码,使用Android的ContentResolver对象查询联系人数据库,获取联系人的姓名。
    • 将联系人的姓名和对话信息一起显示在ListView中。

下面是一个示例代码,演示如何实现上述功能:

代码语言:txt
复制
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.Telephony;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSIONS_REQUEST_READ_SMS = 1;

    private ListView listView;
    private SimpleCursorAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);

        // 检查读取短信权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            // 请求权限
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_SMS},
                    PERMISSIONS_REQUEST_READ_SMS);
        } else {
            // 已有权限,获取短信对话列表
            getSMSConversationList();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == PERMISSIONS_REQUEST_READ_SMS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 获取短信对话列表
                getSMSConversationList();
            } else {
                // 没有权限,处理权限请求被拒绝的情况
            }
        }
    }

    private void getSMSConversationList() {
        // 查询短信对话列表
        Uri uri = Telephony.Sms.Conversations.CONTENT_URI;
        String[] projection = {Telephony.Sms.Conversations._ID, Telephony.Sms.Conversations.MESSAGE_COUNT,
                Telephony.Sms.Conversations.SNIPPET};
        String sortOrder = Telephony.Sms.Conversations.DEFAULT_SORT_ORDER;

        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(uri, projection, null, null, sortOrder);

        // 设置ListView的适配器
        String[] from = {Telephony.Sms.Conversations.SNIPPET, ContactsContract.Contacts.DISPLAY_NAME};
        int[] to = {android.R.id.text1, android.R.id.text2};
        adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from, to);
        listView.setAdapter(adapter);
    }
}

请注意,上述代码中的权限请求部分需要在AndroidManifest.xml文件中添加相应的权限声明:

代码语言:txt
复制
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

这样,当用户授予读取短信和联系人的权限后,应用将获取短信对话列表并在ListView中显示联系人的姓名。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

毕业设计So Easy:Java实现手机APP安全卫士

保护隐私:当用户爱机丢失时,通过短信发送特定指令,可将丢失手机通讯录里面的所有联系人、通话记录以及短信内容全部删除,及时保护用户相关隐私信息。...短信拦截:将指定号码加入到短信拦截列表,那么下次在该号码发送短信时候删除这条短信,避免用户被垃圾信息骚扰。...全部拦截:将指定号码加入到全部截列表,那么下次该号码发送来短信和拨打的电话都会被阻止调,避免用户被骚扰。...3.10、软件管理实现 通过系统API提供包管理器,获取手机已安装应用程序并通过ListView展示给用户,当用户点击某个应用条目后,通过弹出PupupWindow显示功能对话框。...通过反编译QQ通讯录,获取手机号码归属地数据库,将用户输入手机号码与该数据库数据进行匹配获取手机号码归属地并显示给用户。

34230
  • Android系统联系人全特效实现(上),分组导航和挤压动画

    记得在我刚接触Android时候对系统联系人特效很感兴趣,它会根据手机中联系人姓氏首字母进行分组,并在界面的最顶端始终显示一个当前分组。...然后是加入一个简单LinearLayout,里面包含了一个ImageView用于显示联系人头像,还包含一个TextView用于显示联系人姓名。...* * 联系人ListView */ private ListView contactsListView; /** * 联系人列表适配器 */ private ContactAdapter...然后我们在setupContactsListView方法监听了ListView滚动,在onScroll方法通过getSectionForPosition方法获取第一个可见元素分组值,然后给该分组值加...之后再通过ListViewgetChildAt(0)方法,获取到界面上显示第一个子View,再用view.getBottom获取底部距离父窗口位置,对比分组布局高度来对顶部分组布局进行纵向偏移,

    1.2K50

    Tasker内建全局变量

    来电号码如果未知,将显示为0。 来电者姓名如果未知(也许因为对方号码被阻止),则将显示为?,并且如果找不到对应联系人信息,来电者姓名也将显示为电话号码。但在2.0以前版本Android上不可用。...如果没有找到对应联系人信息,则对方姓名显示为电话号码。但在2.0以前版本Android上不可用。 基站ID (动态,被监控) %CELLID 代表当前已知基站ID。...请注意,任务可以被高优先级任务所打断,因此该数值并不一定是任务运行总时长精确结果。 运行任务 (动态) %TRUN 用逗号分隔列表列出了当前运行所有任务名称。...信息 发件人/日期/主题/时间 (已监控) %SMSRF / %SMSRN / %SMSRB / %SMSRD / %MMSRS / %SMSRT 代表上次收到信息(短信和彩信)发件人地址、姓名、...只有在引用这些变量,并收到信息后,这些变量才有内容,这是因为Tasker只有在需要时才监控短信。 如果找不到匹配联系人,则发送人姓名显示为对方地址。

    2.2K30

    ContentProvider使用方法详解

    本篇文章主要介绍 开发部分知识点,通过阅读本篇文章,您将收获以下内容: ContentProvider 获取联系人信息方法 获取短信内容方法 ContentResolver 内容解析者 ContentObserver...内容观察者 ContentProvider ContentResolver ContentObserver 三者关系 我们不是牛逼程序员,我们只是程序开发垫脚石。...获取联系人信息方法 系统自带一下 ,比如 联系人 例如: 源码 下内容 Android 系统Provider.png 本段主要实现获取系统联系人(ContactProvider)提供一些信息 获取联系人实现方法...ListView 显示布局如下 item 布局如下: 注意: 获取联系人需要权限 至此,已经可以获取显示联系人信息。...3.获取短信内容方法 短信内容数据也是系统提供获取方法如下: 获取方法如下 ListView 布局如下 item 布局如下: 4.

    817100

    android短信管理器SmsManager实例详解

    本文实例为大家分享了android短信管理器SmsManager具体代码,供大家参考,具体内容如下 需要注册权限 <uses-permission android:name="android.permission.READ_CONTACTS...ViewGroup parent) { cursor.moveToPosition(position); CheckBox rb = new CheckBox(MainActivity.this); // <em>获取</em><em>联系人</em><em>的</em>电话号码...组件<em>的</em>每个<em>列表</em>项 for(int i=0;i<<em>listView</em>.getCount();i++){ CheckBox checkBox=(CheckBox)<em>listView</em>.getChildAt(i)...; //如果该<em>列表</em>项被勾选 if(checkBox.isChecked()){ //添加到该<em>列表</em>项<em>中</em> sendList.add(checkBox.getText().toString());...@+id/bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="<em>获取</em><em>联系人</em>

    88610

    6.listview显示不用条目

    int count = cursor.getInt(0); // 仅查询 短信条数,仅返回一列 // 以 token 为counts下标,存短信个数 counts[token] =...条目都带着上面的一条,解决方法 每个条目判断和上一个条目是否是同一天,不是显示,是隐藏,但是会不停判读 在获取日期信息时候保存到集合,不是同一天就保存,用第二种,缺点一次性全部取出效率不高 public...** * 要查询列 */ private String[] projection={ "body","_id","address","date" }; /** * 短信内容所在列索引值...为 0 */ private final int INDEX_BODY = 0; /** * 短信联系人电话所在列索引值 为 3 */ private final int INDEX_ADDRESS...thenYear == time.year) && (thenMonth == time.month) && (thenMonthDay == time.monthDay); } /** * 应该显示标题位置集合

    822100

    开启新activity获取返回值

    应用场景:打开一个新activity,在这个activity上获取数据,返回给打开它界面 短信发送时,可以直接选择系统联系人 界面布局是一个线性布局,里面右侧选择联系人在EditText右上,因此使用相对布局对输入框进行包裹...打开一个新界面展示系统联系人,采用ListView控件实现列表,继承BaseAdapter来实现适配器,通过ContentProvider读取系统联系人。...layout_height="wrap_content" android:text="发送"/> activity_select_contact.xml(联系人列表界面...> contact_item.xml(联系人列表单条界面) <?...传递过来参数里面有个Intent对象,通过这个Intent对象获取到数据,展示到界面上 给ListView条目设置点击事件,调用ListView对象setOnItemClickListener(listener

    1.2K40

    AndroidContentProvider用法

    " android:layout_height="wrap_content" /> 一个按钮,对应于获取联系人信息事件,一个ListView用于显示联系人信息...contactsList.clear(); do { /* * 获取联系人姓名...inflate(R.menu.main, menu); return true; } } MainActivity.java主要做一件事:自定义一个方showContacts() 用于获取联系人信息并且显示在...ListView控件,这个方法 首先调用了ContentResolver类query方法并且传入储存联系人信息那张数据表Uri,用于查询联系人信息那张数据表数据,之后对查询返回结果Cursor...单击“显示电话簿”按钮: ? 在这里,如果你用是模拟器,并且模拟器没有联系人的话要添加几个联系人。不然就显示是空界面。

    2K10

    企点3.3 | 在线客服新功能来袭

    想要自定义点击网页上任何元素呼起接待,并完整获取访客浏览与点击数据,就可以使用它。现在这款接待组件支持访客点击后添加企业配置主号或工号为好友。...重点优化 1.通讯录支持拖动联系人变更分组 想要移动联系人更快捷方便,一键拖动即可。「工作台」通讯录页面,我QQ好友页面、收藏联系人页面,均支持拖动移动分组,让分组调整更加便捷。...3.工作台搜索功能支持搜索备注信息 忘了客户姓名?没关系,现在工作台搜索功能现支持搜索客户库备注信息,搜索范围更全面,总能找到你目标人物。...移动端新增用户反馈按钮,用户可在腾讯企点APP反馈使用问题及建议。 2. 支持个人QQ从转发列表内直接选择主号(最近联系人或好友)进行文件转发。 3....客户主动切换客服,客服处轨迹显示为“切换客服”而非“转接客服”。 有奖互动 人人都是产品经理 你最期待上线企点新功能是?

    1.6K20

    反间谍之旅:首款安卓远控木马工具分析

    并在用户注册登录时窃取用户登录凭证。...二、间谍软件远控框架 客户端通过解析控制端发送指令order执行获取联系人信息、短信信息、文件信息以及发送短信等不同操作并将收集信息发送至控制端:http://ra****ch.com。 ?...图3-1 权限管理 如果用户已授予读取联系人权限,则获取联系人列表信息并发送至服务器:http://ra****ch.com/Debugging/process/process/resolving/system...图3-12 发送短信给指定联系人获取联系人信息、文件信息、短信信息发送至控制端http://ra***ch.com。 ?...图3-14 获取用户登录凭证并发送 获取用户注册时输入邮箱账号、密码及姓名信息,并发送至服务器: http://ra***ch.com/Debugging/process/process/resolving

    2.4K00

    短信任务源程序分享

    ShortMessageTask 短信任务v1.4 使用vs.net 2005 beta2写,使用outlook.dll读取联系人,二进制文件保存信息 介绍:将短信放入任务列表,指定在某一时刻发送给某人...将短信放入短信任务吧,他会及时将信息发送出去(只要你不关机 1.2版本:支持后台运行,添加了短信状态图标显示 1.3版本: 1、对联系人选择进行了优化,速度有所提高,特别是第二次选择时候。...增加了left键上翻,right键下翻功能 2、增加了多发方法,直接选择多个联系人或者使用“;”对手机号进行分割 3、信息列表增加了显示时间:如果是当天信息显示“时:分”,如果不是当天信息显示..."日/月" 1.4版本:请大家注意这个版本只有3个文件 1、短信显示将分两行显示:         第一行状态图标和短信息内容(内容为一行,可能显示不全);         第二行显示时间(当天为时间...,其他为日期)和联系人名称(没有的显示手机号,群发可能显示不全) 2、联系人选择:如果联系人有多个电话号码,弹出对话框进行选择(针对有的朋友又有小灵通又有手机) 3、选项:         发送后自动删除短信

    72040

    Android SMS(一) —— 读取短信

    => 发件人,返回一个数字就是联系人列表序号,陌生人为null date => 日期  long型。...Android短信存储数据库 偶然发现了Android源码一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db。...id相同 address      发件人手机号码 person        联系人列表序号,陌生人为null  date            发件日期 protocol      协议,分为:...service_center     短信服务中心号码编号 subject                  短信主题 reply_path_present     TP-Reply-Path locked...短信数据库里面如果你是先受到陌生短信之后再把陌生人添加到联系人列表的话,短信数据库里面的person字段就为null,如果你是先添加联系人再发短信的话,短信数据库里面的person字段就不为空了,所以你要是想通过短信数据库里字段取得联系人其他信息的话

    5.6K40

    Android读取短信联系人

    短信 开始切入正题,先说短信,要从数据库获取数据,就要了解其结构 短信数据库在data-->data下面路径 ?...获取联系人就比较复杂了,其表结构也比较复杂,我们获取联系人姓名、电话号码、邮箱,要通过3张表去提取 数据库所在位置data-->data下面路径 ?...data表,这个表“data1”列几乎包含了我们想要数据,但是如何通过分类提取,第四列代号说明了data1数据类型,这些代号在mimetypes表中有对应说明,要找到这些数据,又要通过raw_contact_id...raw_contacts表,我们通信录显示信息必须要在这里找到对应ID,当我们删除了联系人,data表数据并没有删除,只是删除了证张表contact_id变为null,而不是真的删除 ?...获取联系人效果图 ?

    2.6K30

    Android系统联系人全特效实现(下),字母表快速滚动

    在上一篇文章,我和大家一起实现了类似于Android系统联系人分组导航和挤压动画功能,不过既然文章名叫做《Android系统联系人全特效实现》,那么没有快速滚动功能显然是称不上"全"。...其实ListView本身是有一个快速滚动属性,可以通过在XML设置android:fastScrollEnabled="true"来启用。...然后再对eventaction进行判断,如果是ACTION_DOWN或ACTION_MOVE,就在弹出式分组上显示当前手指所按字母,并调用ListViewsetSelection方法把列表滚动到相应分组...ListView设置监听事件,根据当前滑动状态来改变分组显示位置,从而实现挤压动画效果。...当你手指在右侧字母表上滑动时,联系人列表也跟着相应变动,并在屏幕中央显示一个当前分组。 现在让我们回数一下,分组导航、挤压动画、字母表快速滚动,Android系统联系人全特效都实现了。

    92880

    2-AIV--使用ContentProvider查询联系人

    零、前言 [1].顾名思义,内容提供者,目的:实现跨进程间数据共享 [2].基于数据库提供数据 [3].如电话簿,短信,歌曲信息都是以数据库存储存储,都可以通过ContentProvider获取...[6].本文只打印一下查询结果:ListView篇将会界面展示数据,Xml篇将会介绍备份到本地 一、代码实现 1.实现分析: raw_contacts表查到contact_id, 每个contact_id...下,根据contact_id查询data表字段, 然后判断mimetype值,新建实体类,将数据设置到实体, 将实体放入实体集合,查完返回集合。...ContactBean { /** * 联系人姓名 */ public String name; /** * 联系人地址 */.../** * 获取联系人:ContactBean字段:name姓名 address地址 email邮箱 phone手机号 * * @param ctx 上下文

    53810
    领券