【问题标题】:How to Read SMS Conversation in Android如何在 Android 中阅读短信对话
【发布时间】:2014-01-13 12:42:37
【问题描述】:

我想阅读对话并将其放入 ListView。我该怎么做?
我每行有两个 TextView。我想使用 BaseAdapter 来设置它们。

通过使用这个, 内容://mms-sms/conversations/

*更新:*

我试过这样做:

public ArrayList<String> number = new ArrayList<String>();
public ArrayList<String> body = new ArrayList<String>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ListView listView = (ListView) findViewById(R.id.listView1);

    listView.setAdapter(new BaseAdapter(){
        public int getCount() {
        return number.size();
        }

        public Object getItem(int position) {
        return number.get(position);
        }

        public long getItemId(int position) {
        return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.contact_row, null);
        TextView textView = (TextView) view.findViewById(R.id.textView1);
        textView.setText(number.get(position));
        return view;
        }});


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void getcon()
{
    Uri uriSMSURI = Uri.parse("content://mms-sms/conversations/");
    Cursor cursor = getContentResolver().query(uriSMSURI, null, null, null, "date desc");
    cursor.moveToFirst();
    while (cursor.moveToNext()) 
    {
        String address = cursor.getString(cursor.getColumnIndex("address"));
        //String body = cursor.getString(cursor.getColumnIndexOrThrow("body"));
        //String read = cursor.getString(cursor.getColumnIndexOrThrow("read"));

        String contactName = address;
        Uri Nameuri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(address));  
        Cursor cs= getContentResolver().query(Nameuri, new String[]{PhoneLookup.DISPLAY_NAME},PhoneLookup.NUMBER+"='"+address+"'",null,null);

        if(cs.getCount()>0)
        {
            cs.moveToFirst();
            contactName = cs.getString(cs.getColumnIndex(PhoneLookup.DISPLAY_NAME));
        } 

        number.add(contactName);
      }
}

【问题讨论】:

  • 显示列表中的任何问题..??
  • 显示记录有没有错误.??
  • 没有错误。我只是想要一种方法来做到这一点
  • 有没有收到短信数据,>?>
  • 请检查这个链接你知道如何在android中实现listview..http://www.vogella.com/tutorials/AndroidListView/article.html

标签: java android listview sms


【解决方案1】:
public class ServiceForBoot extends Service {

private IntentFilter filter;
@Override
public void onCreate() {
    super.onCreate();
    filter = new IntentFilter("IntentTag");
    registerReceiver(new TextMessageReceiver(), filter);
}

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public void onStart(Intent intent, int startId) {

}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
}

public class TextMessageReceiver extends BroadcastReceiver{
Context context;
Intent intent;
public void onReceive(Context context, Intent intent)
{ 
    this.context = context;
    this.intent = intent;
    Bundle bundle=intent.getExtras();
    Object[] messages=(Object[])bundle.get("pdus");
    SmsMessage[] sms=new SmsMessage[messages.length];

    for(int n=0;n<messages.length;n++){
        sms[n]=SmsMessage.createFromPdu((byte[]) messages[n]);
    }

    for(SmsMessage msg:sms){
        String number = msg.getOriginatingAddress();
        String message = msg.getMessageBody();
        Log.v("TxtReceiver", "Number: " + number);
        Log.v("TxtReceiver", "Number: " + message);
    }
}
}

当然,您需要为这些服务和接收器设置清单。

<uses-permission android:name="android.permission.RECEIVE_SMS" />

        <receiver android:name=".TextMessageReceiver" >
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

【讨论】:

  • 那么你有短信数据并且你要求实现列表视图吗?如果是这样,您可以搜索自定义数组适配器的简单示例,您只需将数组提供给适配器并通知列表视图以进行数据更改。
【解决方案2】:

试试这个

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";         
}

同时添加这个权限:

<uses-permission name="android.permission.READ_SMS" />

【讨论】:

  • 谢谢,但我不想看短信,我想看对话。查看更新我无法看到项目,这是什么问题。
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 2013-04-17
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多