首页
学习
活动
专区
工具
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通讯录,获取手机号码归属地数据库,将用户输入的手机号码与该数据库中的数据进行匹配获取手机号码归属地并显示给用户。

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

    记得在我刚接触Android的时候对系统联系人中的特效很感兴趣,它会根据手机中联系人姓氏的首字母进行分组,并在界面的最顶端始终显示一个当前的分组。...然后是加入一个简单的LinearLayout,里面包含了一个ImageView用于显示联系人头像,还包含一个TextView用于显示联系人姓名。...* * 联系人ListView */ private ListView contactsListView; /** * 联系人列表适配器 */ private ContactAdapter...然后我们在setupContactsListView方法中监听了ListView的滚动,在onScroll方法中通过getSectionForPosition方法获取第一个可见元素的分组值,然后给该分组值加...之后再通过ListView的getChildAt(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.

    835100

    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); } /** * 应该显示标题的位置的集合

    823100

    开启新的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

    Android中ContentProvider的用法

    " 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.5K00

    短信任务源程序分享

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

    72640

    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.7K40

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

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

    94280

    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 上下文

    54010

    Android读取短信和联系人

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

    2.6K30

    Android UI学习之ListView(使用BaseAdapter)

    ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所以列表项。 今天我们学习如何将系统的短信显示到listView上。...关于如何获取系统的短信请看: Android 四大组件学习之ContentProvider三 先看一下我们的布局文件: ListView的预览界面就是一个列表的形式,每行都是一个item项,那每行的显示样式都是一样的,所以每行也需要一个布局文件 看一下每行的布局文件: 显示号码,第二个显示短信的内容 既然都知道了布局文件,那我们看Activity中的代码 public class MainActivity extends Activity...既然显示了,那我们来优化一个ListView的显示: 我在MyAdapter的getView中加一条打印:如上图所示,我们运行该程序 可以看到postion就是在ListView显示的位置,从0开始

    44900

    在 jQuery Mobile 中使用 UI 组件

    下面的代码显示如何将一个简单的 Web 页面超链接转换为一个将关联 Web 页面打开为一个对话框的超链接: Open dialog...第二个选项是在对话框中的超链接上使用 data-rel 属性,并将其值设置为 back,如以下代码所示。当在对话框中包括一个 Cancel 按钮时,这是一个不错的选项。...创建一个拆分按钮列表很简单:在使用 listview data-role 的一个列表项中添加两个彼此相邻的定位点标记(清单 7)。 清单 7....该列表项还包括一个用作在对话框中购买该列表项的一个超链接的图标。您也可以使用 data-split-icon 属性,修改显示在列表项右侧的拆分按钮的默认图标。 另一个有用的基本列表增强是列表分隔符。...例如,如果您有一个员工姓名列表,并且您将一个搜索筛选器栏添加到该列表,用户就能够通过向搜索筛选器文本输入键入一个或多个字符,来筛选和缩小在该页面上显示的结果范围。

    8.1K20
    领券