我正在尝试制作读取短信内容的Android应用程序,当手机获取新短信时,应用程序会发出通知。 这就是我所拥有的(我从网站上看到的):
public class SMSRead extends Activity{
@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);
}
}
目前,代码会打印短信的原始号码,但不显示短信cur.getString(11)
的正文,而是显示null
我还实施了以下许可:
<uses-permission android:name="android.permission.READ_SMS"/>
答案 0 :(得分:1)
因为它没有11列。做一个getColumnCount,你会看到它。
基本上,您不应该依赖列的顺序,除非您提供它们。你不是。而是使用getColumnIndex(String columnName)来确定哪个列是正文。
答案 1 :(得分:0)
这是一个在理想世界中应该起作用的样本:
public List<Sms> getAllSms(String folderName) {
List<Sms> lstSms = new ArrayList<Sms>();
Sms objSms = new Sms();
Uri message = Uri.parse("content://sms/"+folderName);
ContentResolver cr = mActivity.getContentResolver();
Cursor c = cr.query(message, null, null, null, null);
mActivity.startManagingCursor(c);
int totalSMS = c.getCount();
if (c.moveToFirst()) {
for (int i = 0; i < totalSMS; i++) {
objSms = new Sms();
objSms.setId(c.getString(c.getColumnIndexOrThrow("_id")));
objSms.setAddress(c.getString(c
.getColumnIndexOrThrow("address")));
objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body")));
objSms.setReadState(c.getString(c.getColumnIndex("read")));
objSms.setTime(c.getString(c.getColumnIndexOrThrow("date")));
lstSms.add(objSms);
c.moveToNext();
}
}
// else {
// throw new RuntimeException("You have no SMS in " + folderName);
// }
c.close();
return lstSms;
}
此示例读取收件箱中的所有邮件。有点小提琴,你应该能够让它读取一条信息。