【发布时间】:2015-08-03 01:40:38
【问题描述】:
我想从我的活动中启动一个 ProgressDialog 和一个广播接收器 (SMS_RECEIVED)。当从定义的号码收到短信时,它应该停止对话并分析短信文本。
在我拥有 Dialog 和 Receiver 的那一刻,两者都有效。当我关闭对话框时,它会停止接收器。
但是我怎样才能让它工作,当收到短信并将短信文本提供给活动时,对话框关闭?
我的 Activity 中的 ProgressDialog:
protected void sendSMS(String sms){
try {
final ComponentName receiver = new ComponentName(this, IncomingSms.class);
final PackageManager pm = this.getPackageManager();
pm.setComponentEnabledSetting(receiver,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
waitSms = new ProgressDialog(this);
waitSms.setTitle("Warte auf Bestätigungs SMS");
waitSms.setCancelable(false);
waitSms.setMessage("Abbrechen setzt die Einstellung in der App auf inaktiv zurück. Nicht warten übernimmt die Einstellung in der App, wartet aber nicht weiter auf eine Bestätigungs SMS.");
waitSms.setButton(DialogInterface.BUTTON_NEGATIVE, "Abbrechen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
waitSms.dismiss();
}
});
waitSms.setButton(DialogInterface.BUTTON_POSITIVE, "Nicht warten", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
waitSms.dismiss();
}
});
waitSms.show();
}
我的广播接收器:
public class IncomingSms extends BroadcastReceiver {
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration);
toast.show();
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
}
谢谢帮助
【问题讨论】:
标签: android broadcastreceiver progressdialog