android - 从发送的短信中获取数据

标签 android sms

每次 Android 发送 SMS 时,我都会尝试检索数据。

数据形式:

  1. 目的地电话号码
  2. 交货时间
  3. 短信正文

有人知道怎么做吗?

最佳答案

在发件箱中获取短信。

public List<SmsRep> getOutboxSms()
{
    if(null == context)
    {
        return new ArrayList<SmsRep>();
    }

    Uri uriSms = Uri.parse("content://sms/sent");
    Cursor cursor = context.getContentResolver().query(uriSms, null,null,null,null); 
    List<SmsRep> outboxSms = cursor2SmsArray(cursor);

    if(!cursor.isClosed())
    {
        cursor.close();
    }

    return outboxSms;
}

以及处理发件箱中数据的方法:

public static List<SmsRep> cursor2SmsArray(Cursor cursor)
    {
        if(null == cursor || 0 == cursor.getCount())
        {
            return new ArrayList<SmsRep>();
        }

        List<SmsRep> messages = new ArrayList<SmsRep>();

        try
        {
            for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())
            {
                SmsRep singleSms = new SmsRep();
                singleSms.id = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
                singleSms.address = cursor.getString(cursor.getColumnIndexOrThrow("address"));
                singleSms.timestamp = cursor.getLong(cursor.getColumnIndexOrThrow("date")) / 1000;   //### the sent time
                singleSms.type = cursor.getInt(cursor.getColumnIndexOrThrow("type"));
                singleSms.protocol = cursor.getInt(cursor.getColumnIndexOrThrow("protocol"));

                /*
                String smsSubject = cursor.getString(cursor.getColumnIndex("subject"));
                byte[] subjByts = smsSubject.getBytes("UTF8");
                singleSms.subject = new String(subjByts, "UTF8");
                */


                String smsBody = cursor.getString(cursor.getColumnIndexOrThrow("body"));  //### body
                byte[] bodyBytes = smsBody.getBytes("UTF8");
                singleSms.body = TextUtils.htmlEncode(new String(bodyBytes, "UTF8"));  //escape,handle '='              
                singleSms.deviceId = deviceId;

                //singleSms.body = cursor.getString(cursor.getColumnIndexOrThrow("body"));
                messages.add(singleSms);
            }

        }
        catch (Exception e) 
        {
            Log.e(TAG, e.getMessage());
        } 
        finally 
        {
            cursor.close();
        }

        return messages;        
}

SmsRep 的定义:

    public class SmsRep 
    {
    static String separator ;

    public int id;
    public String address;
    public long timestamp;
    public int type;
    public int protocol;
    public String subject;
    public String body;
    public String deviceId;

        public SmsRep()
        {
              // do nothing in ctor
        }


}

这是你想要的吗?:)

关于android - 从发送的短信中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451354/

相关文章:

ruby-on-rails - 使用 Rails 和 Twilio 发送短信

android - 如何在 C# 中以编程方式列出来自设备 (iOS/Android) 的 SMS 对话?

twilio - 为什么我不能向墨西哥的来电者发送 Twilio 验证短信?

android - 如何以编程方式从 Android 设备读取 RCS 消息

java - Post 方法在 Android 的 AsyncHttpClient 中不起作用

java - Android进度对话框不在中间而是在底部

android - adb 将使 tcpip session 保持 Activity 状态多长时间?

android - 三星 Galaxy S8 上的 Unity/ARCore - 相机图像被拉伸(stretch)

android - 限制 google api 项目的 OAuth 2.0 客户端 ID

java - 在 android 中使用 intent 发送短信后不显示 toast