最近,开始接触安卓应用的开发,看了几集网易云课堂的视频,看了一下开发文档,发现光读光看没什么用,要实践才能出真知,于是就自己定了一个需求,慢慢开始写安卓应用。

1.自定需求:开发一个包括三大运营商的余额和流量查询。

2.查询资料,包括三大运营商短信查询的代码和号码。

三大运营商短信查询情况

服务

中国移动

中国联通

中国电信

查询余额

ye

101

102

查询流量

cxll

2082

108

3.开发阶段

阅读开发文档,熟悉基本概念activity,intent,布局,button

发现安卓自家的开发文档如果能够研究透了,安卓应用开发无压力了。附上地址:https://developer.android.google.cn/guide/

设计思路:6个button+三个运营商显示text。开始的思路:6个button均指向同一个onClick行为,此行为指向方法:sendMessage,然后在sendMessage里处理发送短信。使用intent,后来发现使用intent调用activity只能跳转到短信界面,并不能达到我的预期(预期是应用只按button,即可完成发送短信功能,可以返回接收短信信息,也可以不返回),下面是此部分代码:

public void sendMessage(View view) {
Intent intent = new Intent();
if (view.getId() == R.id.cmcc_balance) {
Uri uri = Uri.parse("smsto:10086");
intent =new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "ye");
}else if (view.getId() == R.id.cmcc_remain) {
Uri uri = Uri.parse("smsto:10086");
intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "cxll");
}else if (view.getId() == R.id.telecom_balance) {
Uri uri = Uri.parse("smsto:10000");
intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "102");
}else if (view.getId() == R.id.telecom_remain) {
Uri uri = Uri.parse("smsto:10000");
intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "108");
}else if (view.getId() == R.id.unicom_balance) {
Uri uri = Uri.parse("smsto:10010");
intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "101");
}else if (view.getId() == R.id.unicom_remain) {
Uri uri = Uri.parse("smsto:10010");
intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "2082");
}
startActivity(intent);
}

修改方案,实现在本应用内发送短信。6个button指向一个buttonClick,buttonClick处理三个运营商的信息,传递至sendMessage,sendMessage主要负责处理发送短信的工作。代码:

public void buttonClick(View view){
String phoneString = new String();
String smsString = new String();
if (view.getId() == R.id.cmcc_balance) {
phoneString = "10086";
smsString = "ye";
}else if (view.getId() == R.id.cmcc_remain) {
phoneString = "10086";
smsString = "cxll";
}else if (view.getId() == R.id.telecom_balance) {
phoneString = "10000";
smsString = "102";
}else if (view.getId() == R.id.telecom_remain) {
phoneString = "10000";
smsString = "108";
}else if (view.getId() == R.id.unicom_balance) {
phoneString = "10010";
smsString = "101";
}else if (view.getId() == R.id.unicom_remain) {
phoneString = "10010";
smsString = "2082";
}
sendMessage(phoneString, smsString);
}
senMessage()代码:
public void sendMessage(String phoneNumber,String message) {
android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();
ListdivideContents = smsManager.divideMessage(message);
for(String text : divideContents){
smsManager.sendTextMessage(phoneNumber, null, text, null, null);
}
}

刚开始,在sendmessage中简单的处理android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();smsManager.sendTextMessage(phoneNumber, null, message, null, null);应用出错,加入调试信息,判断是sendmessage中的问题。看来还是不能简单处理发送短信功能。

重新查阅了开发文档,应用出错的原因是没有添加发送短信的权限在manifast文件中,所以应用发送短信时出错。修改后应用实现自己的基本预期。

接下来会继续优化应用,利用系统广播,在发送短信时能够接收发送成功的消息。

使用boardcast广播,接收系统返回的消息,其中包括:发送成功和收信人接收成功。

其中,处理发送成功消息的代码:

context.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show();
break;
case android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF:
case android.telephony.SmsManager.RESULT_ERROR_NULL_PDU:
break;
}
}
}, new IntentFilter(SEND_SMS_ACTION));

处理收信人接收成功消息代码:

context.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT).show();
}
}, new IntentFilter(DELIVERED_SMS_ACTION));

关于这部分主要是参考其他几个博客的资料,具体原理还不算很了解,需要进一步钻研。