1.目的
写短信发送器案例主要是为了落实A界面到B界面跳转的数据传输,及B界面关闭后的数据返回再显示这段逻辑,并进行多页面尝试开发。主要功能是输入号码,写入内容发送短信,我们这里主要添加的功能是,跳转到我们自己模拟的联系人页面,点击需要发送给的联系人,页面回转并拿到电话号码,同理,再实现一个插入短信大全内容的功能,将另一个页面的短信内容添加到主页面的发送框中,再点击发送,完成功能。
mainActivity
public class MainActivity extends AppCompatActivity {
private EditText et_number;
private TextView tv_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_number = findViewById(R.id.et_number);
tv_content = findViewById(R.id.tv_content);
}
public void add(View v){
//点击实现跳转
Intent intent = new Intent(getApplicationContext(),ContactsActivity.class);
// startActivity(intent);
//如果点击按钮开启另一个activity 并且该页面关闭时需要回传数据 就是用这个方法开启
startActivityForResult(intent,1);
}
public void insert(View v){
//点击跳转到messageActivity
Intent intent = new Intent(getApplicationContext(),MessageActivity.class);
//开启需要返回数据的界面
startActivityForResult(intent,2);
}
public void send(View v){
String phone = et_number.getText().toString().trim();
String content = tv_content.getText().toString().trim();
SmsManager smsManager = SmsManager.getDefault();
//destinationAddress 目标地址
//scaddress 服务中心号码 null 默认
//text要发送的内容
smsManager.sendTextMessage(phone,null,content,null,null);
}
//当我们开启的跳转页面关闭时 会调用这个方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==10){
String number = data.getStringExtra("number");
et_number.setText(number);
}else if(resultCode==20){
String message = data.getStringExtra("message");
tv_content.setText(message);
}
}
}
ContactsActivity 跳转页面到联系人页面(模拟)
public class ContactsActivity extends AppCompatActivity {
private List<People> list;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
//设置假数据
list = new ArrayList<People>();
for (int i=0;i<200;i++){
People people = new People();
people.setName("张三"+i);
people.setNumber("110"+i);
list.add(people);
}
ListView lv = findViewById(R.id.lv);
lv.setAdapter(new myAdapter());
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//获得数据 将数据传回caller
String number = list.get(position).getNumber();
System.out.println(number);
Intent intent = new Intent();
intent.putExtra("number",number);
//进行页面关闭 触发main页面的onActivityResult的方法
setResult(10,intent);
finish();
}
});
}
public 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) {
View view;
if(convertView==null){
view =View.inflate(getApplicationContext(),R.layout.item_contacts,null);
}else{
view=convertView;
}
TextView tv_name = view.findViewById(R.id.tv_name);
TextView tv_number = view.findViewById(R.id.tv_number);
tv_name.setText(list.get(position).getName());
tv_number.setText(list.get(position).getNumber());
return view;
}
}
}
MessageActivity 短信大全的内容页面
public class MessageActivity extends AppCompatActivity {
String objects[]={"不好意思,我在上课,一会儿给您回复","不好意思,我在外面,一会儿给您回复",
"不好意思,我在约会,一会儿给您回复","不好意思,我在工作,一会儿给您回复"};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message);
ListView lv_message = findViewById(R.id.lv_message);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.item_message,objects);
lv_message.setAdapter(adapter);
//设置点击事件
lv_message.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//获得数据
String message = objects[position];
//用intent携带数据
Intent intent = new Intent();
intent.putExtra("message",message);
//把携带的数据进行传递
setResult(20,intent);
//记得要关闭页面呢
finish();
}
});
}
}
还有个对象封装
public class People {
private String name;
private String number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
完成整个逻辑,这次我在模拟器调试好后,软磨硬泡(出于对俺们程序员的陌生与莫名的恐惧)用小伙伴手机来了次部署在真机上,体验一把,哇,简直不要太爽,这丝滑流畅~~ 我滴模拟器开到4.0都没这般丝滑,泪奔~~~
直接上图:
网上搜刮的apple小图标 区别下安卓本机的软件
点击+号 进行页面跳转
点击任意模拟联系人 数据回显 同理插入短信
传递短信 点击发送即可被运营商扣除1毛钱,嘎嘎
注意:记得加短信发送权限(在小伙伴手机上部署后我发现没有发出去 然后取手机设置中打开了短信权限 正品的APP都会在第一次进入提示你是否开启权限,奈何我的盗版BUG尚多,只能手动打开了··)
··································································END··························································································
下篇总结Activity重要知识 下篇见