使用Content://sms/inbox Uri查询接收短消息,并将查询到的SMS显示到一个ListView控件中,同时在ListView item中提供删除短消息的功能:
//MainActivity.java
package com.sms.inbox;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.OnHierarchyChangeListener;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ResourceCursorAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class MainActivity extends ListActivity {
private ListAdapter adapter;
ContentResolver resolver;
Cursor cursor;
private Button btnRefrash,btnRemove;
private ListView listView;
private View view;
private TextView numSMS;
private static final Uri SMS_INBOX = Uri.parse("content://sms/inbox");
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
resolver = getContentResolver();
listView = getListView();
numSMS = (TextView) findViewById(R.id.tvNumSMS);
btnRefrash = (Button) findViewById(R.id.btnRefrash);
btnRefrash.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
init();
}
});
init();
}
private void init(){
cursor = getContentResolver().query(SMS_INBOX, new String[]{"_id","thread_id"}, null, null, null);
/* if(cursor!=null && cursor.moveToFirst()){
do{
long _id = cursor.getLong(0);
System.out.println("_id----->" + _id);
//resolver.delete(Uri.parse("content://sms/conversations/" + thread_id), null, null);
}while(cursor.moveToNext());
}*/
cursor = resolver.query(SMS_INBOX, null, null, null,null);
/*if(cursor!=null){
for(int i=0;i<cursor.getColumnCount();i++){
System.out.println(cursor.getColumnName(i));
}
}*/
startManagingCursor(cursor);
if(cursor!=null && cursor.getCount()>0){
adapter=new MyAdapter(this, cursor);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
// TODO Auto-generated method stub
super.onChanged();
init();
}
});
listView.setAdapter(adapter);
numSMS.setText(adapter.getCount()+"");
}
}
private void deleteSMS(int _id,int thread_id){
int rows = resolver.delete(Uri.parse("content://sms/conversations/" + thread_id), "_id=" + _id,null);
init();
}
private class MyAdapter extends ResourceCursorAdapter{
public MyAdapter(Context context, Cursor c) {
super(context, R.layout.item, c ,true);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
TextView sender = (TextView) view.findViewById(R.id.tvAddress);
TextView body = (TextView) view.findViewById(R.id.tvBody);
sender.setText(cursor.getString(cursor.getColumnIndex("address")));
body.setText(cursor.getString(cursor.getColumnIndex("body")));
Button remove = (Button) view.findViewById(R.id.btnRemove);
final int _id = cursor.getInt(0);
final int thread_id = cursor.getInt(1);
remove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
deleteSMS(_id,thread_id);
}
});
}
}
}
//main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center"
android:gravity="center_vertical"
android:text="Shonwing the Inbox folder Messages below!"
/>
<TextView
android:id="@+id/tvNumSMS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:gravity="center"
android:textSize="30sp"
android:textColor="#aa2288"
android:layout_margin="3dip"
/>
<Button
android:id="@+id/btnRefrash"
android:layout_marginLeft="5dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Refrash"
android:layout_gravity="center"
/>
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
//item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.0"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sender: "
/>
<TextView
android:id="@+id/tvAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Address"
/>
</LinearLayout>
<TextView
android:id="@+id/tvBody"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SMSBody"
android:singleLine="true"
android:layout_marginTop="3dip"
/>
</LinearLayout>
<Button
android:id="@+id/btnRemove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Remove"
/>
</LinearLayout>
//manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sms.inbox"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
</manifest>