Android 获取系统联系人并发送短信demo

步骤:1.首先通过联系人的ContentResolver获取系统联系人信息,并展现在界面;

2.选择联系人后,返回前一个界面,将联系人号码传递回去;

3.根据联系人号码和输入短信内容,调用系统API发送短信,在利用短信的ContentResolver保存数据到本地;


部分代码:

package com.example.contact;

import java.util.List;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	EditText et;
	EditText body;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Intent intent = getIntent();
		String phone = intent.getStringExtra("phone");
		et = (EditText)findViewById(R.id.editText1);
		body = (EditText)findViewById(R.id.body);
		et.setText(phone);
	}

		public void change(View view){
			Toast.makeText(this, "选择联系人", 0).show();
			Intent intent = new Intent(this,OtherActivity.class);
			startActivity(intent);
		}
		
		public void send(View view){
			
			
			String s_num = et.getText().toString().trim();
			String s_con = body.getText().toString().trim();
			//利用工具类判断字符是否为空,并提示
			if(TextUtils.isEmpty(s_num) || TextUtils.isEmpty(s_con)){
				Toast.makeText(this, "电话号码或内容不能为空", Toast.LENGTH_SHORT).show();
				return;
			}
			/**
			 * 发送短信需要获得系统权限,需要到AndroidManifest.xml里面配置权限
			 * <uses-permission android:name="android.permission.SEND_SMS"/>
			 * 用系统API发送短信,不会再系统短信界面中显示
			 */
			//得到系统短信管理器
			SmsManager sm = SmsManager.getDefault();
			//将文本内容进行转换,防止输入一条短信太长,进行拆分
			List<String> list = sm.divideMessage(s_con);
			for(String s: list){
				//发送短信,最后一个参数代表,发送成功后,进行消息提示
				/**
				 * 参数1:短信发给谁
				 * 参数2:国内暂不支付(短信来自哪里,对自己号码进行伪装)
				 * 参数3:短信内容
				 * 参数4:延迟意图
				 * 参数5:短信送达报告(是否投递成功)
				 */
				sm.sendTextMessage(s_num, null, s, null, null);
			}
			//获取内容提供者对象
			ContentResolver resolver = getContentResolver();
			//设置发送短信的Uri
			Uri uri = Uri.parse("content://sms/sent");
			ContentValues values = new ContentValues();
			//设置参数
			values.put("address", s_num);
			values.put("type", 2);
			values.put("read", 0);
			values.put("date", System.currentTimeMillis());
			values.put("body", s_con);
			resolver.insert(uri, values);
			Toast.makeText(this, "发送成功", 0).show();
		}
}

package com.example.contact;


import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class OtherActivity extends Activity {

	private static final String Contact = null;
	List<Contact> list;
	ListView listView ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other);
		listView = (ListView)findViewById(R.id.lv);
		//得到内容提供者对象
		ContentResolver resolver = getContentResolver();
		//设置查找uri
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		//获得所有的联系人信息
		Cursor cursor = resolver.query(uri, null, null, null, null);
		list = new ArrayList<Contact>();
		//遍历每个联系人,根据联系人ID,获得它的相关数据,循环完毕,获得一个联系人的全部信息
		while (cursor.moveToNext()) {
			String id = cursor.getString(cursor.getColumnIndex("contact_id"));
			ContentResolver resolvers = getContentResolver();
			Uri uri1 = Uri.parse("content://com.android.contacts/data");
			Cursor cur= resolvers.query(uri1, null, "raw_contact_id=?", new String[]{id}, null);
			Contact con = new Contact(id);
			while (cur.moveToNext()) {
				changeData(cur,con);
			}
			list.add(con);
			cur.close();
		}
		cursor.close();
		listView.setAdapter(new MyAdapter());
	}
	
	private class MyAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return list.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			TextView tv = new TextView(getApplicationContext());
			tv.setTextColor(Color.BLACK);
			tv.setTextSize(20);
			final Contact con = list.get(position);
			tv.setText(con.toString());
			tv.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					Intent intent = new Intent(getApplicationContext(),MainActivity.class);
					intent.putExtra("phone", con.getPhone());
					startActivity(intent);
				}
			});
			return tv;
		}
		
	}
	
	public void changeData(Cursor cur,Contact con){
		String mimetype = cur.getString(cur.getColumnIndex("mimetype"));
		String data = cur.getString(cur.getColumnIndex("data1"));
		if("vnd.android.cursor.item/name".equals(mimetype)){
			con.setName(data);
		}else if("vnd.android.cursor.item/postal-address_v2".equals(mimetype)){
			con.setAdress(data);
		}else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
			con.setPhone(data);
		}
	}

}

点击下载源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值