1

受信トレイにある特定の SMS を読みたいです。インターネットで、受信トレイ内のすべての SMS を読む方法を見つけました。それが私がしたことです。特定の番号からの SMS を 1 つだけ読み取る方法を教えてください。ありがとう

package com.example.liresms;

import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

public class ReadSMS extends MainActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      TextView view = new TextView(this);
      Uri uriSMSURI = Uri.parse("content://sms/inbox");
      Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null);
      String sms = "";
      while (cur.moveToNext()) {
          sms += "From :" + cur.getString(2) + " : " + cur.getString(11)+"\n";         
      }
      view.setText(sms);
      setContentView(view);
  }
}
4

2 に答える 2

1

これを試して:

StringBuilder smsBuilder = new StringBuilder();
final String SMS_URI_INBOX = "content://sms/inbox"; 
final String SMS_URI_ALL = "content://sms/";  
try 
{  
    Uri uri = Uri.parse(SMS_URI_INBOX);  
    String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" };  
    Cursor cur = getContentResolver().query(uri, projection, "address=123456789", null, "date desc");
    if (cur.moveToFirst()) 
    {  
        int index_Address = cur.getColumnIndex("address");  
        int index_Person = cur.getColumnIndex("person");  
        int index_Body = cur.getColumnIndex("body");  
        int index_Date = cur.getColumnIndex("date");  
        int index_Type = cur.getColumnIndex("type");         
        do 
        {  
            String strAddress = cur.getString(index_Address);  
            int intPerson = cur.getInt(index_Person);  
            String strbody = cur.getString(index_Body);  
            long longDate = cur.getLong(index_Date);  
            int int_Type = cur.getInt(index_Type);  

            smsBuilder.append("[ ");  
            smsBuilder.append(strAddress + ", ");  
            smsBuilder.append(intPerson + ", ");  
            smsBuilder.append(strbody + ", ");  
            smsBuilder.append(longDate + ", ");  
            smsBuilder.append(int_Type);  
            smsBuilder.append(" ]\n\n");  
        }while (cur.moveToNext());  
        if (!cur.isClosed()) 
        {  
            cur.close();  
            cur = null;  
        }  
    } 
    else 
    {  
        smsBuilder.append("no result!");  
    }  
} 
catch (SQLiteException ex) 
{  
    Log.d("SQLiteException", ex.getMessage());  
}  

このアクセス許可を AndroidManifest.xml に含めます。

<uses-permission android:name="android.permission.READ_SMS" />
于 2013-05-03T19:36:36.443 に答える
0

あなたはすでにそれをやっているところにかなり近づいています。ContentResolver.queryメソッドの引数を見て、パラメーターに特に注意を払うことをお勧めしselectionます。あなたが探しているのは、特定の列が探している数と等しいメッセージのみを選択することです...

何かのようなもの

Cursor cur = getContentResolver().query(uriSMSURI, null, "from=6159995555", null,null);

頭のてっぺんから特定の列名はわかりませんが、それで正しい方向に進むはずです...

于 2013-05-03T19:34:01.307 に答える