




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】Android編程如何實現(xiàn)短信收發(fā)及語音播報提示功能
/**
*
發(fā)送短信Demo
*/
public
class
SmsActivity
extends
Activity
implements
OnClickListener
{
public
static
final
String
SMS_RECIPIENT_EXTRA
=
"com.ldm.study.SMS_RECIPIENT";
public
static
final
String
ACTION_SMS_SENT
=
"com.ldm.study.SMS_SENT_ACTION";
private
Button
sms_send_message;
private
EditText
sms_recipient;
private
EditText
sms_content;
private
CheckBox
sms_enable_receiver;
private
TextView
sms_status;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.send_sms_layout);
initViews();
initListeners();
registerSmsReceiver();
}
/**
*
注冊短信監(jiān)聽廣播
*/
private
void
registerSmsReceiver()
{
registerReceiver(new
BroadcastReceiver()
{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
String
message
=
null;
boolean
error
=
true;
switch
(getResultCode())
{
case
Activity.RESULT_OK:
message
=
"發(fā)送成功!";
error
=
false;
break;
case
SmsManager.RESULT_ERROR_GENERIC_FAILURE:
message
=
"發(fā)送失敗";
break;
case
SmsManager.RESULT_ERROR_NO_SERVICE:
message
=
"發(fā)送失敗";
break;
case
SmsManager.RESULT_ERROR_NULL_PDU:
message
=
"發(fā)送失敗";
break;
case
SmsManager.RESULT_ERROR_RADIO_OFF:
message
=
"發(fā)送失敗";
break;
}
sms_recipient.setEnabled(true);
sms_content.setEnabled(true);
sms_content.setText("");
sms_status.setText(message);
sms_status.setTextColor(error
?
Color.RED
:
Color.GREEN);
}
},
new
IntentFilter(ACTION_SMS_SENT));
}
/**
*
監(jiān)聽事件
*/
private
void
initListeners()
{
sms_send_message.setOnClickListener(this);
//
應用Package管理器
final
PackageManager
pm
=
this.getPackageManager();
//
獲取到應用中指定的組件
final
ComponentName
componentName
=
new
ComponentName("com.ldm.study",
"com.ldm.study.receiver.SmsMessageReceiver");
//
根據(jù)組件是否可用的狀態(tài)來判斷sms_enable_receiver的選中狀態(tài)
sms_enable_receiver
.setChecked(pm.getComponentEnabledSetting(componentName)
==
PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
//
監(jiān)聽sms_enable_receiver設置廣播組件是否可用
sms_enable_receiver
.setOnCheckedChangeListener(new
OnCheckedChangeListener()
{
public
void
onCheckedChanged(CompoundButton
buttonView,
boolean
isChecked)
{
//
組件狀態(tài)設置
pm.setComponentEnabledSetting(
componentName,
isChecked
?
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
:
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
});
}
private
void
initViews()
{
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
public
void
onClick(View
v)
{
if
(v.getId()
==
R.id.sms_send_message)
{
sendSms();
}
}
/**
*
發(fā)送短信
*
*/
private
void
sendSms()
{
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);
SmsManager
sms
=
SmsManager.getDefault();
List<String>
messages
=
sms.divideMessage(sms_recipient.getText()
.toString());
String
recipient
=
sms_content.getText().toString();
for
(String
message
:
messages)
{
//
發(fā)送短信
sms.sendTextMessage(recipient,
null,
message,
PendingIntent
.getBroadcast(SmsActivity.this,
0,
new
Intent(
ACTION_SMS_SENT),
0),
null);
}
}
}/**
*
接收短信語音播報
*
*/
public
class
SmsReceivedActivity
extends
Activity
implements
OnInitListener
{
private
static
final
int
DIALOG_SHOW_MESSAGE
=
1;
public
static
final
String
SMS_FROM_ADDRESS_EXTRA
=
"com.ldm.study.SMS_FROM_ADDRESS";
public
static
final
String
SMS_FROM_DISPLAY_NAME_EXTRA
=
"com.ldm.study.SMS_FROM_DISPLAY_NAME";
public
static
final
String
SMS_MESSAGE_EXTRA
=
"com.ldm.study.SMS_MESSAGE";
private
TextToSpeech
mTts;
private
String
mFromDisplayName;
private
String
mFromAddress;
private
String
mMessage;
private
String
mFullBodyString;
@SuppressWarnings("deprecation")
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
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
=
new
TextToSpeech(this,
this);
}
/**
*
初始化TTS服務
*/
@SuppressWarnings("deprecation")
public
void
onInit(int
status)
{
if
(status
==
TextToSpeech.SUCCESS)
{//
成功狀態(tài)
//
設置語言,TTS引擎支持
English、
French
、
German
、
Italian
和
Spanish
這5大語言
int
result
=
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
protected
Dialog
onCreateDialog(int
id)
{
switch
(id)
{
case
DIALOG_SHOW_MESSAGE:
return
new
AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_email)
.setTitle("Message
Received")
.setMessage(mFullBodyString)
.setPositiveButton("回復",
new
DialogInterface.OnClickListener()
{
public
void
onClick(DialogInterface
dialog,
int
whichButton)
{
//
回復短信則跳轉到發(fā)送短信界面,把接收人信息帶過去
Intent
i
=
new
Intent();
i.setClass(SmsReceivedActivity.this,
SmsActivity.class);
i.putExtra(SmsActivity.SMS_RECIPIENT_EXTRA,
mFromAddress);
startActivity(i);
dialog.dismiss();
finish();
}
})
.setNegativeButton("取消",
new
DialogInterface.OnClickListener()
{
public
void
onClick(DialogInterface
dialog,
int
whichButton)
{
dialog.dismiss();
finish();
}
}).create();
}
return
null;
}
}短信廣播/**
*
短信來信監(jiān)聽廣播
*
*/
public
class
MyMsmReceiver
extends
BroadcastReceiver
{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
Bundle
extras
=
intent.getExtras();
if
(extras
==
null)
return;
//
收到的短信內容
Object[]
pdus
=
(Object[])
extras.get("pdus");
for
(int
i
=
0;
i
<
pdus.length;
i++)
{
SmsMessage
message
=
SmsMessage.createFromPdu((byte[])
pdus[i]);
String
fromAddress
=
message.getOriginatingAddress();
String
fromDisplayName
=
fromAddress;
Uri
uri;
String[]
projection;
uri
=
Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_U
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【科銳國際】人才市場洞察及薪酬指南2025
- 【光子盒】2025全球量子計算產業(yè)發(fā)展展望報告
- 無菌敷貼可行性研究報告
- 江蘇省鎮(zhèn)江市宜城中學教育集團五校聯(lián)考2024-2025學年七年級下學期3月月考數(shù)學試題(原卷版+解析版)
- 公共安全事件應對與處理指南
- 船舶運輸管樁報價策略分析
- 養(yǎng)老服務中心可行性研究報告模板
- 游戲開發(fā)行業(yè)游戲設計與用戶體驗優(yōu)化方案
- 三農村經濟發(fā)展規(guī)劃方案
- 項目可行研究報告
- 大學生信息素養(yǎng)大賽考試題庫及答案
- 兒童保健(康復)管理信息系統(tǒng)需求說明
- 文獻檢索與論文寫作
- 《麻醉與BIS監(jiān)測》課件
- 嶺南版二年級美術上冊期末試題B
- 勞務派遣人員安全培訓方案
- 組建新部門規(guī)劃方案
- 行政審批政策法規(guī)知識講座
- 合肥娃哈哈廠勞動合同
- 【盒馬鮮生生鮮類產品配送服務問題及優(yōu)化建議分析10000字(論文)】
- 《江蘇住宅物業(yè)管理服務標準》(DB32T538-2002)
評論
0/150
提交評論