简单来说,我希望每次收到新短信时我的短信列表都会更新。这是代码
static String phoneNumber;
int phoneID;
private ListSMSAdapter adapter_1;
public List<SMSData> smsList = new ArrayList<SMSData>();
private PhoneDAO dao;
private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
Log.i("MESSAGE", Integer.toString(smsList.size()));
smsList.clear();
smsList.addAll(fillSMS(phoneNumber));
Log.i("MESSAGE", Integer.toString(smsList.size()));
adapter_1.notifyDataSetChanged();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dao = new PhoneDAO(this);
Bundle showData = getIntent().getExtras();
phoneNumber = showData.getString("phone_number");
phoneID = showData.getInt("phone_id");
adapter_1 = new ListSMSAdapter(this, fillSMS(phoneNumber));
setListAdapter(adapter_1);
}
protected List<SMSData> fillSMS(String p){
Uri uri = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uri, null, "address = \"" + p + "\"", null, null);
startManagingCursor(c);
// Read the sms data and store it in the list
if (c.moveToFirst()) {
for (int i = 0; i < c.getCount(); i++) {
SMSData sms = new SMSData();
sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
smsList.add(sms);
c.moveToNext();
}
}
return smsList;
}
现在第一个日志显示:5 (它应该显示6)
在addAll之后:10
但即便如此,SMS列表也没有更新。有什么我想念的吗?
由于
更新
接收器正在工作,抱歉没有指出这一点。
问题似乎在updateReceiver中有“clear”和“addAll”
答案 0 :(得分:0)
我在您的代码段中没有看到它,您是否曾致电registerReceiver给您updateReceiver
?或者同样,使用AndroidManifest.xml中的<receiver>
标记?
答案 1 :(得分:0)
我已对您的代码进行了一些修改,请检查
static String phoneNumber;
int phoneID;
private ListSMSAdapter adapter_1;
public List<SMSData> smsList = new ArrayList<SMSData>();
private PhoneDAO dao;
private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
Log.i("MESSAGE", Integer.toString(smsList.size()));
smsList.clear();
fillSMS(phoneNumber);
Log.i("MESSAGE", Integer.toString(smsList.size()));
adapter_1.notifyDataSetChanged();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dao = new PhoneDAO(this);
Bundle showData = getIntent().getExtras();
phoneNumber = showData.getString("phone_number");
phoneID = showData.getInt("phone_id");
fillSMS(phoneNumber);
adapter_1 = new ListSMSAdapter(this, smsList);
setListAdapter(adapter_1);
}
protected List<SMSData> fillSMS(String p){
Uri uri = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uri, null, "address = \"" + p + "\"", null, null);
startManagingCursor(c);
// Read the sms data and store it in the list
if (c.moveToFirst()) {
for (int i = 0; i < c.getCount(); i++) {
SMSData sms = new SMSData();
sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
smsList.add(sms);
c.moveToNext();
}
}
}