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

效果如图:

Android开发之Contentprovider实现获取手机短信((收)发件人、短信内容、收(发)件时间)_第1张图片


布局activity_massage.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
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

?
1
2
3
4
5
6
7
8
9
10
11
12
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

?
1
2
3
4
5
6
7
8
9
10
11
12
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> 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> cursorToList(Cursor cursor2) {
        List> list = new ArrayList>();
        while (cursor2.moveToNext()) {// 注意:这里是循环每一行的数据
            Map smsItem = new HashMap();
            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> smsList;

        public MybaseAdapter(List> 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开发之Contentprovider实现获取手机短信((收)发件人、短信内容、收(发)件时间))