Android編程實現(xiàn)短信收發(fā)及語音播報提示功能示例
本文實例講述了Android編程實現(xiàn)短信收發(fā)及語音播報提示功能。分享給大家供大家參考,具體如下:
發(fā)送短信功能界面
/**
* 發(fā)送短信Demo
*
* @description:
* @author ldm
* @date 2016-4-22 上午9:07:53
*/
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)聽廣播
*
* @description:
* @author ldm
* @date 2016-4-22 上午9:23:23
*/
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)聽事件
*
* @description:
* @author ldm
* @date 2016-4-22 上午9:24:20
*/
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ā)送短信
*
* @description:
* @author ldm
* @date 2016-4-22 上午9:30:38
*/
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);
}
}
}
收到短信后處理界面:
/**
* 接收短信語音播報
*
* @description:
* @author ldm
* @date 2016-4-22 上午9:34:21
*/
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)聽廣播
*
* @description:
* @author ldm
* @date 2016-4-22 上午10:07:49
*/
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_URI,
Uri.encode(fromAddress));
projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME };
// 查詢短信的發(fā)件人
Cursor cursor = context.getContentResolver().query(uri, projection,
null, null, null);
if (cursor != null) {
if (cursor.moveToFirst())
fromDisplayName = cursor.getString(0);
cursor.close();
}
// 跳轉到短信接收界面
Intent di = new Intent();
di.setClass(context, SmsReceivedActivity.class);
di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
di.putExtra(SmsReceivedActivity.SMS_FROM_ADDRESS_EXTRA, fromAddress);
di.putExtra(SmsReceivedActivity.SMS_FROM_DISPLAY_NAME_EXTRA,
fromDisplayName);
di.putExtra(SmsReceivedActivity.SMS_MESSAGE_EXTRA, message
.getMessageBody().toString());
context.startActivity(di);
}
}
}
附:DEMO示例代碼點擊此處本站下載。
更多關于Android相關內容感興趣的讀者可查看本站專題:《Android短信與電話操作技巧匯總》、《Android文件操作技巧匯總》、《Android操作json格式數(shù)據(jù)技巧總結》、《Android編程之activity操作技巧總結》、《Android開發(fā)入門與進階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
相關文章
Android基礎之使用Fragment適應不同屏幕和分辨率(分享)
以下是對Fragment的使用進行了詳細的分析介紹,需要的朋友可以過來參考下2013-07-07
Android編程之ProgressBar圓形進度條顏色設置方法
這篇文章主要介紹了Android編程之ProgressBar圓形進度條顏色設置方法,涉及ProgressBar布局及屬性設置相關操作技巧,需要的朋友可以參考下2017-02-02
Android基于zxing的二維碼(網(wǎng)格)掃描 仿支付寶網(wǎng)格掃描
這篇文章主要為大家詳細介紹了Android基于zxing的二維碼網(wǎng)格掃描,仿支付寶網(wǎng)格掃描,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Android Studio實現(xiàn)簡單音樂播放功能的示例代碼
這篇文章主要介紹了Android Studio實現(xiàn)簡單音樂播放功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
Android實現(xiàn)EditText中添加和刪除bitmap的方法
這篇文章主要介紹了Android實現(xiàn)EditText中添加和刪除bitmap的方法,實例分析了Android中EditText控件的bitmap操作技巧,需要的朋友可以參考下2016-01-01

