功能介绍
1、选择添加联系人
2、插入短信模板
3、发送
实现短信的发送
涉及到的知识点
页面跳转以及参数传递
listview的布局和实现
设置listview上每个条目的点击事件并实现
BaseAdapter和ArrayAdapter的使用
发送功能的实现
实现布局代码如下:
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity" >
<RelativeLayout
android:id="@+id/rv_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/en_number"
android:layout_width="238dp"
android:layout_height="wrap_content"
android:hint="请输入联系人"
android:textSize="25sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/en_number"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/en_number"
android:onClick="add"
android:text="+" />
</RelativeLayout>
<EditText android:id="@+id/en_content"
android:layout_width="match_parent"
android:layout_height="200dp"
android:hint="请输入短信的内容"
android:gravity="top"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="templete"
android:text="跳转短信模板"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="send"
android:text="发送"
/>
</LinearLayout>
该页面布局代码如下:
<LinearLayout 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=".SmsTempelteActivity" >
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textSize="20sp"
android:text="ada123131" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/tv_name"
android:layout_weight="1"
android:textSize="20sp"
android:text="ada1" />
</LinearLayout>
listview的布局
布局代码如下:
<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=".ContactActivity" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</RelativeLayout>
将短信显示模板内容显示到该listview上(https://img-blog.csdn.net/20160605005656509)
布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv_templete"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
短信文本布局如下
(https://img-blog.csdn.net/20160605010031677)
实现布局:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceSmall" />
至此,布局页面完成
先自定义一个类
public class Person {
private String number;
private String name;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
一下为实现代码
1、MainActivity代码实现如下
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText en_number;
private EditText en_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
en_number = (EditText) findViewById(R.id.en_number);
en_content = (EditText) findViewById(R.id.en_content);
}
//点击跳转到联系人界面
public void add(View v) {
Intent intent = new Intent(this,ContactActivity.class);
//获取打开页面传递回来的值 requestCode用于区分页面
startActivityForResult(intent, 10);
}
//点击跳转到模板界面
public void templete(View v) {
Intent intent = new Intent(this,SmsTempelteActivity.class);
//获取打开页面传递回来的值 requestCode用于区分页面
startActivityForResult(intent, 20);
}
//点击实现发送短信的功能
public void send(View v) {
String number = en_number.getText().toString().trim();
String content = en_content.getText().toString().trim();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(number, null, content, null, null);
}
//当我们开启的页面关闭的时候调用这个方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//这儿有一个小细节:当用resultCode时可以没有响应结果,那么程序不会执行当前方法
//当用requestCode时,必须有一个返回值,程序一定会执行当前方法
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 1){
String phone = data.getStringExtra("phone");
en_number.setText(phone);
}
if(resultCode == 2){
String content = data.getStringExtra("smscontent");
en_content.setText(content);
}
/*
if(requestCode == 10){
//获取返回的电话号码
String phone = data.getStringExtra("phone");
en_number.setText(phone);
}else if(requestCode == 20){
//获取返回的短信内容
//Toast.makeText(getApplication(), "", duration)
String content = data.getStringExtra("smscontent");
en_content.setText(content);
}*/
}
}
2、联系人页面实现代码
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ContactActivity extends Activity {
private ListView lv;
private List<Person> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
// 获取关心的控件
lv = (ListView) findViewById(R.id.lv);
list = new ArrayList<Person>();
// 初始化集合数据
Person p = new Person();
for (int i = 0; i < 100; i++) {
p.setName("xiaoli" + i);
p.setNumber("123456" + i);
list.add(p);
}
// Onb
lv.setAdapter(new MyAdapter());
// 通过点击条目获取到该条目的信息,这里只需要电话号码,即获取电话号码
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String phone = list.get(position).getNumber();
Intent intent = new Intent();
intent.putExtra("phone", phone);
setResult(1, intent); // 通过调用这个方法,把数据返回给(调用者)MainActivity
finish(); // 关闭当前页面,通过查看onBackPressed的源码得知,调用finish方法
}
});
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 通过inflate获取布局
View view;
if (convertView == null) {
view = View.inflate(getApplication(), R.layout.activity_item,
null);
} else {
// convertView存在就复用历史缓存对象
view = convertView;
}
// 获取姓名和电话号码id
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
// 设置姓名和电话号码
tv_name.setText(list.get(position).getName());
tv_phone.setText(list.get(position).getNumber());
return view;
}
}
}
3、短信模板页面实现
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
public class SmsTempelteActivity extends Activity {
private ListView lv_templete;
String[] objects = {“1231”,”34dfa”,”qwe”,”zxfvz”,”352”,”DvS”,”54654”,};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smstemplete);
//获取listview的id
lv_templete = (ListView) findViewById(R.id.lv_templete);
//将数据展示在listview上
lv_templete.setAdapter(new ArrayAdapter<String>(getApplication(), R.layout.smstemplete_item, objects));
//设置listview的点击事件
lv_templete.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//第一种获取数据方法
/*ListAdapter adapter = lv_templete.getAdapter();
String content = (String) adapter.getItem(position);
Intent intent = new Intent();
intent.putExtra("smscontent", content);
setResult(2, intent);
//关闭页面
finish(); */
//第二种获取数据方法
Intent intent = new Intent();
String content = objects[position];
intent.putExtra("smscontent",content);
System.out.println("-----------" + content);
setResult(2, intent); //调用该方法,将数据返回给开启此页面的那个活动
finish(); //关闭页面
}
});
}
}
“`