首页
学习
活动
专区
工具
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中显示联系人的姓名。

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

相关·内容

  • 短信任务源程序分享[.NET CF C#]

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

    04
    领券