您的位置:首页 > 移动开发 > Android开发

Android开发之Contentprovider实现获取手机短信((收)发件人、短信内容、收(发)件时间)

2017-02-21 20:39 573 查看
效果如图:



布局activity_massage.xml

?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="zking.com.g150825_android25_contentprovider02.massage">
<ListView
android:id="@+id/listView_main_smslist"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>

<TextView
android:id="@+id/text_main_empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#00f"
android:textSize="24sp"
android:gravity="center"
android:text="暂无短信信息!" />
</RelativeLayout>



item_listview.xml

?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView_item_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
/>

<TextView
android:id="@+id/text_item_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="30dp"
android:layout_toRightOf="@+id/imageView_item_icon"
android:text="TextView" />

<TextView
android:id="@+id/text_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView_item_icon"
android:layout_alignLeft="@+id/text_item_address"
android:text="TextView" />

<TextView
android:id="@+id/text_item_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="TextView" />
</LinearLayout>



massage

?

package zking.com.g150825_android25_contentprovider02;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class massage extends AppCompatActivity {

private ListView listview;
private TextView empty;
private Cursor cursor;
private MybaseAdapter adapter;
private ContentResolver resolver;
// 短信数据库放在:手机的内存,/data/data/con.android.providers.telephony/databases/mmssms.db
private String uri = "content://sms";// 对外暴露的短信格式
private List<Map<String, String>> smsList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_massage);
listview = (ListView) this.findViewById(R.id.listView_main_smslist);
empty = (TextView) this.findViewById(R.id.text_main_empty);
listview.setEmptyView(empty);
// 内容提供者获取数据库操作链接和数据库内的数据
// 通过Context类获取ContentResolver
resolver = getContentResolver();
//resolver.query(uri, projection, selection, selectionArgs, sortOrder)
//参数projection:数据库的字段;selection:sql语句;selectionArgs:想让sql插入更新等传入的内容   sortOrder:排序
cursor = resolver.query(Uri.parse(uri), new String[] { "_id",
"address", "body", "date", "type" }, null, null, null);
smsList = cursorToList(cursor);
// 建一个baseAdapter类
adapter = new MybaseAdapter(smsList);
listview.setAdapter(adapter);

}

public List<Map<String, String>> cursorToList(Cursor cursor2) {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
while (cursor2.moveToNext()) {// 注意:这里是循环每一行的数据
Map<String, String> smsItem = new HashMap<String, String>();
for (int i = 0; i < cursor2.getColumnCount(); i++) {// 这里是循环每一行的列数
smsItem.put(cursor2.getColumnName(i), cursor2.getString(i));// 键:key:存储每一行的字段,value:值就是内容
}
list.add(smsItem);
}
cursor2.close();
return list;
}

class MybaseAdapter extends BaseAdapter {
private List<Map<String, String>> smsList;

public MybaseAdapter(List<Map<String, String>> smsList) {
this.smsList = smsList;
}

@Override
public int getCount() {
return this.smsList.size();
}

@Override
public Object getItem(int position) {
return this.smsList.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = getLayoutInflater().inflate(
R.layout.item_listview, null);
TextView text_address = (TextView) convertView
.findViewById(R.id.text_item_address);
TextView text_body = (TextView) convertView
.findViewById(R.id.text_item_body);
TextView text_date = (TextView) convertView
.findViewById(R.id.text_item_date);
ImageView image_type = (ImageView) convertView
.findViewById(R.id.imageView_item_icon);

holder.text_address = text_address;
holder.text_body = text_body;
holder.text_date = text_date;
holder.image_type = image_type;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 设置UI控件的内容
holder.text_address.setText(this.smsList.get(position).get(
"address"));
holder.text_body.setText(this.smsList.get(position).get("body"));
long mills = Long.parseLong(this.smsList.get(position).get("date")
.toString());
SimpleDateFormat adf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
holder.text_date.setText(adf.format(new Date(mills)));
int type = Integer.parseInt(this.smsList.get(position).get("type")
.toString());
switch (type) {
case 1:
holder.image_type.setImageResource(R.drawable.file);

break;
case 2:
holder.image_type.setImageResource(R.drawable.folder);
break;
}
return convertView;
}

class ViewHolder {
private TextView text_address;
private TextView text_body;
private TextView text_date;
private ImageView image_type;
}
}

}



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 手机 短信