Android编程实现短信收发及语音播报提示功能示例
本文实例讲述了Android编程实现短信收发及语音播报提示功能。分享给大家供大家参考,具体如下:
发送短信功能界面
/**
*发送短信Demo
*
*@description:
*@authorldm
*@date2016-4-22上午9:07:53
*/
publicclassSmsActivityextendsActivityimplementsOnClickListener{
publicstaticfinalStringSMS_RECIPIENT_EXTRA="com.ldm.study.SMS_RECIPIENT";
publicstaticfinalStringACTION_SMS_SENT="com.ldm.study.SMS_SENT_ACTION";
privateButtonsms_send_message;
privateEditTextsms_recipient;
privateEditTextsms_content;
privateCheckBoxsms_enable_receiver;
privateTextViewsms_status;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.send_sms_layout);
initViews();
initListeners();
registerSmsReceiver();
}
/**
*注册短信监听广播
*
*@description:
*@authorldm
*@date2016-4-22上午9:23:23
*/
privatevoidregisterSmsReceiver(){
registerReceiver(newBroadcastReceiver(){
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Stringmessage=null;
booleanerror=true;
switch(getResultCode()){
caseActivity.RESULT_OK:
message="发送成功!";
error=false;
break;
caseSmsManager.RESULT_ERROR_GENERIC_FAILURE:
message="发送失败";
break;
caseSmsManager.RESULT_ERROR_NO_SERVICE:
message="发送失败";
break;
caseSmsManager.RESULT_ERROR_NULL_PDU:
message="发送失败";
break;
caseSmsManager.RESULT_ERROR_RADIO_OFF:
message="发送失败";
break;
}
sms_recipient.setEnabled(true);
sms_content.setEnabled(true);
sms_content.setText("");
sms_status.setText(message);
sms_status.setTextColor(error?Color.RED:Color.GREEN);
}
},newIntentFilter(ACTION_SMS_SENT));
}
/**
*监听事件
*
*@description:
*@authorldm
*@date2016-4-22上午9:24:20
*/
privatevoidinitListeners(){
sms_send_message.setOnClickListener(this);
//应用Package管理器
finalPackageManagerpm=this.getPackageManager();
//获取到应用中指定的组件
finalComponentNamecomponentName=newComponentName("com.ldm.study",
"com.ldm.study.receiver.SmsMessageReceiver");
//根据组件是否可用的状态来判断sms_enable_receiver的选中状态
sms_enable_receiver
.setChecked(pm.getComponentEnabledSetting(componentName)==PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
//监听sms_enable_receiver设置广播组件是否可用
sms_enable_receiver
.setOnCheckedChangeListener(newOnCheckedChangeListener(){
publicvoidonCheckedChanged(CompoundButtonbuttonView,
booleanisChecked){
//组件状态设置
pm.setComponentEnabledSetting(
componentName,
isChecked?PackageManager.COMPONENT_ENABLED_STATE_ENABLED
:PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
});
}
privatevoidinitViews(){
sms_recipient=(EditText)(findViewById(R.id.sms_recipient));
sms_content=((EditText)findViewById(R.id.sms_content));
//是否打开短信广播接收开关
sms_enable_receiver=(CheckBox)findViewById(R.id.sms_enable_receiver);
sms_send_message=(Button)findViewById(R.id.sms_send_message);
sms_status=(TextView)findViewById(R.id.sms_status);
if(getIntent().hasExtra(SMS_RECIPIENT_EXTRA)){
sms_recipient.setText(getIntent().getExtras().getString(
SMS_RECIPIENT_EXTRA));
sms_content.requestFocus();
}
}
@Override
publicvoidonClick(Viewv){
if(v.getId()==R.id.sms_send_message){
sendSms();
}
}
/**
*发送短信
*
*@description:
*@authorldm
*@date2016-4-22上午9:30:38
*/
privatevoidsendSms(){
if(TextUtils.isEmpty(sms_recipient.getText())){
Toast.makeText(SmsActivity.this,"请输入短信接收者",Toast.LENGTH_SHORT)
.show();
return;
}
if(TextUtils.isEmpty(sms_content.getText())){
Toast.makeText(SmsActivity.this,"请输入短信内容",Toast.LENGTH_SHORT)
.show();
return;
}
sms_recipient.setEnabled(false);
sms_content.setEnabled(false);
SmsManagersms=SmsManager.getDefault();
Listmessages=sms.divideMessage(sms_recipient.getText()
.toString());
Stringrecipient=sms_content.getText().toString();
for(Stringmessage:messages){
//发送短信
sms.sendTextMessage(recipient,null,message,PendingIntent
.getBroadcast(SmsActivity.this,0,newIntent(
ACTION_SMS_SENT),0),null);
}
}
}
收到短信后处理界面:
/**
*接收短信语音播报
*
*@description:
*@authorldm
*@date2016-4-22上午9:34:21
*/
publicclassSmsReceivedActivityextendsActivityimplementsOnInitListener{
privatestaticfinalintDIALOG_SHOW_MESSAGE=1;
publicstaticfinalStringSMS_FROM_ADDRESS_EXTRA="com.ldm.study.SMS_FROM_ADDRESS";
publicstaticfinalStringSMS_FROM_DISPLAY_NAME_EXTRA="com.ldm.study.SMS_FROM_DISPLAY_NAME";
publicstaticfinalStringSMS_MESSAGE_EXTRA="com.ldm.study.SMS_MESSAGE";
privateTextToSpeechmTts;
privateStringmFromDisplayName;
privateStringmFromAddress;
privateStringmMessage;
privateStringmFullBodyString;
@SuppressWarnings("deprecation")
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//短信来电号码
mFromAddress=getIntent().getExtras()
.getString(SMS_FROM_ADDRESS_EXTRA);
//来电人称呼
mFromDisplayName=getIntent().getExtras().getString(
SMS_FROM_DISPLAY_NAME_EXTRA);
mMessage=getIntent().getExtras().getString(SMS_MESSAGE_EXTRA);
//短信内容
mFullBodyString=String.format(getString(R.string.sms_format),
mFromDisplayName,mMessage);
showDialog(DIALOG_SHOW_MESSAGE);
//初始化TTS
mTts=newTextToSpeech(this,this);
}
/**
*初始化TTS服务
*/
@SuppressWarnings("deprecation")
publicvoidonInit(intstatus){
if(status==TextToSpeech.SUCCESS){//成功状态
//设置语言,TTS引擎支持English、French、German、Italian和Spanish这5大语言
intresult=mTts.setLanguage(Locale.ENGLISH);
if(result==TextToSpeech.LANG_MISSING_DATA
||result==TextToSpeech.LANG_NOT_SUPPORTED){
Toast.makeText(this,"TTS不可用",Toast.LENGTH_LONG).show();
}else{
mTts.speak(mFullBodyString,TextToSpeech.QUEUE_ADD,null);
//mTts.speak(mFullBodyString,TextToSpeech.QUEUE_ADD,null,
//"");
}
}else{
Toast.makeText(this,"TTS初始化失败",Toast.LENGTH_LONG).show();
}
}
@Override
protectedDialogonCreateDialog(intid){
switch(id){
caseDIALOG_SHOW_MESSAGE:
returnnewAlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_email)
.setTitle("MessageReceived")
.setMessage(mFullBodyString)
.setPositiveButton("回复",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,
intwhichButton){
//回复短信则跳转到发送短信界面,把接收人信息带过去
Intenti=newIntent();
i.setClass(SmsReceivedActivity.this,
SmsActivity.class);
i.putExtra(SmsActivity.SMS_RECIPIENT_EXTRA,
mFromAddress);
startActivity(i);
dialog.dismiss();
finish();
}
})
.setNegativeButton("取消",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,
intwhichButton){
dialog.dismiss();
finish();
}
}).create();
}
returnnull;
}
}
短信广播
/**
*短信来信监听广播
*
*@description:
*@authorldm
*@date2016-4-22上午10:07:49
*/
publicclassMyMsmReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Bundleextras=intent.getExtras();
if(extras==null)
return;
//收到的短信内容
Object[]pdus=(Object[])extras.get("pdus");
for(inti=0;i
附:DEMO示例代码点击此处本站下载。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android短信与电话操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作json格式数据技巧总结》、《Android编程之activity操作技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。