package cn.itcast.smsmanager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.ContactsContract.PhoneLookup;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.text.format.Time;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import cn.itcast.smsmanager.domain.Groups;
import cn.itcast.smsmanager.domain.Sms;
import cn.itcast.smsmanager.domain.Thread_Groups;
public class ConversationActivity extends Activity implements OnClickListener{
private Button bt_new_msg;
private Button bt_all_select;
private Button bt_cancel_selected;
private Button bt_delete;
private LinearLayout mEdit;
private ListView mListView;
private TextView tv_empty;
private QueryHandler mQueryHandler;
private ConversationAdapter mAdapter;
//短信会话的投影
private final static String[] CONVERSATION_PROJECTION = new String[]{"sms.thread_id as _id",
"snippet",
"msg_count",
"sms.address as address",
"sms.date as date"};
private final static int ID_COLUMN_INDEX = 0;
private final static int SNIPPET_COLUMN_INDEX = 1;
private final static int MSG_COUNT_COLUMN_INDEX = 2;
private final static int ADDRESS_COLUMN_INDEX = 3;
private final static int DATE_COLUMN_INDEX = 4;
//联系人的投影
private final static String[] CONTACT_PROJECTION = new String[]{PhoneLookup.DISPLAY_NAME};
private final static int DISPLAY_NAME_COLUMN_INDEX = 0;
//群组的投影
private final static String[] GROUP_PROJECTION = new String[]{Groups._ID,Groups.GROUP_NAME};
private final static int GROUP_NAME_COLUMN_INDEX = 1;
private static final int MENU_SEARCH_ID = Menu.NONE + 1;
private static final int MENU_DELETE_ID = Menu.NONE + 2;
private static final int MENU_BACK_ID = Menu.NONE + 3;
private MenuItem menu_item_search;
private MenuItem menu_item_delete;
private MenuItem menu_item_back;
//Activity的显示模式
enum DISPLAYMODE{
list,edit
};
private DISPLAYMODE mode = DISPLAYMODE.list;
private HashSet<String> mMultSelected = new HashSet<String>();
private ProgressDialog mProgressDialog;
private boolean delete = true;
private String thread_ids;
private String group_name;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.conversation);
thread_ids = getIntent().getStringExtra("thread_ids");
group_name = getIntent().getStringExtra("group_name");
initTitle();
initView();
startQuery();
}
/**
* 初始化标题
*/
private void initTitle() {
// TODO Auto-generated method stub
if(group_name != null){
setTitle(group_name);
}
}
/**
* 查询短信的数据
* getContentResolver().query();
* managedQuery(uri, projection, selection, selectionArgs, sortOrder) 不用手动的去管理cursor,让activity去帮我们管理
* 如果直接查询,就是在主线程进行的。
* 可以采用android提供的异步框架,
* 使用范围:只能去访问我们的ContentProvider所提供的数据
*/
private void startQuery() {
// TODO Auto-generated method stub
Uri uri = Sms.CONVERSATION_URI;
// select * from table where thread_id in (2,3) thread_ids <===> (2,3)
if(thread_ids != null){
String where = Sms.THREAD_ID + " in " + thread_ids;
mQueryHandler.startQuery(0, null, uri, CONVERSATION_PROJECTION, where, null, " date desc");
}else{
mQueryHandler.startQuery(0, null, uri, CONVERSATION_PROJECTION, null, null, " date desc");
}
}
/**
* 初始化控件
*/
private void initView() {
// TODO Auto-generated method stub
bt_new_msg = (Button) findViewById(R.id.bt_new_msg);
bt_all_select = (Button) findViewById(R.id.bt_all_select);
bt_cancel_selected = (Button) findViewById(R.id.bt_cancel_selected);
bt_delete = (Button) findViewById(R.id.bt_delete);
//设置点击监听事件
bt_new_msg.setOnClickListener(this);
bt_all_select.setOnClickListener(this);
bt_cancel_selected.setOnClickListener(this);
bt_delete.setOnClickListener(this);
mEdit = (LinearLayout) findViewById(R.id.edit);
mListView = (ListView) findViewById(R.id.listview);
tv_empty = (TextView) findViewById(R.id.empty);
mEdit.setVisibility(View.GONE);
bt_delete.setVisibility(View.GONE);
//当listview里面数据为空的时候,显示一个布局
mListView.setEmptyView(tv_empty);
mQueryHandler = new QueryHandler(getContentResolver());
mAdapter = new ConversationAdapter(this, null);
mListView.setAdapter(mAdapter);
//给listview设置条目点击事件
mListView.setOnItemClickListener(new MyOnItemClickListener());
//设置listview长按事件
mListView.setOnItemLongClickListener(new MyOnItemLongClickListener());
}
private final class MyOnItemLongClickListener implements OnItemLongClickListener{
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
if(mode == DISPLAYMODE.list){
//得到会话的id
Cursor cursor = (Cursor) mAdapter.getItem(position);
final String thread_id = cursor.getString(ID_COLUMN_INDEX);
//查询群组数据
final HashMap<String,String> groupsMap = new HashMap<String,String>();
Uri uri = Groups.CONTENT_URI;
Cursor group_cursor = getContentResolver().query(uri, GROUP_PROJECTION, null, null, null);
if(group_cursor.getCount() > 0){
while(group_cursor.moveToNext()){
String group_id = group_cursor.getString(ID_COLUMN_INDEX);
String group_name = group_cursor.getString(GROUP_NAME_COLUMN_INDEX);
groupsMap.put(group_name, group_id);
}
group_cursor.close();
}else{
group_cursor.close();
Toast.makeText(getApplicationContext(), R.string.please_create_group, Toast.LENGTH_LONG).show();
return true;
}
//构建群组数组
int i = 0;
final String[] groups = new String[groupsMap.size()];
for(Map.Entry<String, String> entry:groupsMap.entrySet()){
groups[i] = entry.getKey();
i++;
}
AlertDialog.Builder builder = new AlertDialog.Builder(ConversationActivity.this);
builder.setTitle(R.string.select_collection_group);
builder.setItems(groups, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String group_name = groups[which];
String group_id = groupsMap.get(group_name);
//把会话收藏到群组
/**
* 1 先判断会话是否已经收藏到了该群组
*
*/
Uri uri = Thread_Groups.CONTENT_URI;
Str
没有合适的资源?快使用搜索试试~ 我知道了~
android智能短信源码
共141个文件
class:67个
png:28个
java:19个
4星 · 超过85%的资源 需积分: 9 26 下载量 174 浏览量
2013-03-01
16:54:21
上传
评论
收藏 291KB RAR 举报
温馨提示
android智能短信源码,内容包括联系人与短信content的数据库操作,以及如何复用android sdk源码去重写系统底层应用。
资源推荐
资源详情
资源评论
收起资源包目录
android智能短信源码 (141个子文件)
resources.ap_ 38KB
smsmanager.apk 69KB
jarlist.cache 119B
proguard.cfg 1KB
ConversationActivity.class 11KB
MainActivity.class 6KB
FolderListActivity$FolderListAdapter.class 6KB
ConversationActivity$ConversationAdapter.class 5KB
FolderActivity.class 5KB
FolderListActivity.class 5KB
ConversationActivity$MyOnItemLongClickListener.class 5KB
ConversastionListActivity.class 5KB
SmsManagerProvider.class 5KB
SmsDetailActivity.class 4KB
NewMessageActivity.class 4KB
SearchableActivity$SearchAdapter.class 4KB
SearchableActivity.class 4KB
GroupActivity.class 4KB
ConversationActivity$MyOnItemClickListener.class 4KB
GroupActivity$MyOnItemClickListener.class 4KB
ContactAdapter.class 4KB
ConversastionListActivity$ConversationListAdapter.class 3KB
ConversationActivity$MyOnItemLongClickListener$1.class 3KB
MySuggestionProvider.class 3KB
FolderActivity$FolderAdapter.class 3KB
ConversationActivity$1.class 3KB
NewGroupActivity.class 3KB
FolderListActivity$MyOnItemClickListener.class 2KB
FolderListActivity$QueryHandler.class 2KB
GroupActivity$GroupsAdapter.class 2KB
SearchableActivity$MyOnItemClickListener.class 2KB
FolderActivity$MyOnItemClickListener.class 2KB
ConversationActivity$DeleteTask.class 2KB
NewMessageActivity$MyOnItemClickListener.class 2KB
SmsManagerDBHelper.class 2KB
MainActivity$MyOnTabChangedListener.class 2KB
NewMessageActivity$MyTextWatcher.class 2KB
R$string.class 2KB
FolderActivity$QueryHandler.class 2KB
ConversationActivity$1$1.class 1KB
ConversastionListActivity$QueryHandler.class 1KB
ConversationActivity$1$2.class 1KB
SearchableActivity$QueryHandler.class 1KB
ConversationActivity$QueryHandler.class 1KB
ConversationActivity$DISPLAYMODE.class 1KB
GroupActivity$QueryHandler.class 1KB
Sms.class 1KB
R$id.class 1KB
SmsDetailActivity$QueryHandler.class 1019B
FolderActivity$MyContentObserver.class 965B
ConversationActivity$ConversationViews.class 935B
ConversationActivity$2.class 900B
ConversastionListActivity$ConversationListViews.class 898B
FolderListActivity$FolderListViews.class 864B
R$layout.class 848B
SearchableActivity$SearchViews.class 848B
R$drawable.class 809B
FolderActivity$FolderViews.class 798B
GroupActivity$GroupsViews.class 772B
ContactAdapter$ContactViews.class 758B
Thread_Groups.class 742B
Groups.class 675B
Sms$Outbox.class 656B
Sms$Draft.class 652B
Sms$Inbox.class 652B
Sms$Sent.class 648B
R.class 639B
R$menu.class 400B
R$xml.class 397B
BuildConfig.class 349B
R$attr.class 346B
.classpath 364B
classes.dex 60KB
ConversationActivity.java 22KB
FolderListActivity.java 9KB
ConversastionListActivity.java 6KB
FolderActivity.java 6KB
SearchableActivity.java 6KB
GroupActivity.java 6KB
R.java 5KB
MainActivity.java 5KB
SmsDetailActivity.java 4KB
SmsManagerProvider.java 4KB
NewMessageActivity.java 3KB
ContactAdapter.java 2KB
MySuggestionProvider.java 2KB
NewGroupActivity.java 2KB
SmsManagerDBHelper.java 1KB
Sms.java 1KB
Thread_Groups.java 377B
Groups.java 310B
BuildConfig.java 162B
ic_contact_picture.png 5KB
ic_unknown_picture_normal.png 5KB
congsmall.png 4KB
congsmall.png 4KB
ic_launcher.png 4KB
ic_launcher.png 4KB
tab_conversation.png 3KB
tab_group.png 3KB
共 141 条
- 1
- 2
资源评论
- 「已注销」2015-11-22还不错 不过这类项目重复的有几个
- lyz_10111238512013-06-07android智能短信源码
- llwslc2014-03-02挺好的,能读取短信
- carmayo2013-11-13还不错的小例子
獨霸技院
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Easy Save - 3.5.6
- 基于tensorflow的目标检测系统源码+部署教程文档+全部数据+训练好的模型(高分项目)
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 免费听歌软件,支持无损音乐下载,支持收藏音乐同步
- 锐起RDV-5.0 build 6503
- ngrok-stable-windows-amd64.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功