第一个安卓应用---简易发送短信查询余额和流量APP

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

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();	
		List divideContents = 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));
关于这部分主要是参考其他几个博客的资料,具体原理还不算很了解,需要进一步钻研。
 
 

你可能感兴趣的:(android应用开发)