我有一个提醒应用程序,它将发送短信通知用户他们的提醒时间已经过去.这很好用.但是,我一直在测试当手机睡着并错过提醒时会发生什么.
我正在AlarmManager设置警报以对应提醒时间.我的日志记录显示,当手机重新启动并且发送短信的尝试发生时,闹钟响起,但从未收到短信.
所以问题是,有没有办法调试为什么不发送短信?
我的当前代码在发生警报事件时设置ContentObserver:
private void registerToListenForSentSMS()
{
MessageSentListener smsObeserver = new MessageSentListener(new Handler());
ContentResolver contentResolver = TheEveryOtherAlarmAppApplication.getAppContext().getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver);
}
Run Code Online (Sandbox Code Playgroud)
MessageSentListener收到一些 SMS事件发生的通知:
public class MessageSentListener extends ContentObserver
{
public MessageSentListener(Handler handler)
{
super(handler);
}
@Override
public void onChange(boolean selfChange)
{
super.onChange(selfChange);
Log.d(Constants.ALARM_APP_LOG_TAG, "Something happend");
ContentResolver contentResolver = AlarmAppApplication.getAppContext().getContentResolver();
contentResolver.unregisterContentObserver(this);
}
}
Run Code Online (Sandbox Code Playgroud)
但这可能是由与我的应用程序无关的SMS事件引起的.无论如何,它并没有真正让我更接近解决方案 - 我想知道什么时候出现什么问题!
如果没有发送警报短信,我可以重新发送或使用其他一些通知方法,如电子邮件等.
您将需要广播接收器和待定意图以获得有关失败短信的通知.
下面的代码片段可以帮助您
//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(context, "SMS sent",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(context, "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(context, "No service",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(context, "Null PDU",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(context, "Radio off",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
//---when the SMS has been delivered---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(context, "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(context, "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
Run Code Online (Sandbox Code Playgroud)
小智 0
您可以使用 BroadcastReceiver 检查短信是否发送,如果没有发送,是什么问题
val TAG = "TRACK_SMS_STATUS"
private fun sendSMS(phoneNumber: String, message: String) {
val send = "SMS_SENT"
val delivered = "SMS_DELIVERED"
val sentPI = PendingIntent.getBroadcast(activity, 0,
Intent(send), PendingIntent.FLAG_IMMUTABLE)
val deliveredPI = PendingIntent.getBroadcast(activity, 0,
Intent(delivered), PendingIntent.FLAG_IMMUTABLE)
//---when the SMS has been sent---
registerReceiver(object : BroadcastReceiver() {
override fun onReceive(arg0: Context?, arg1: Intent?) {
val bundle: Bundle? = arg1?.extras
when (resultCode) {
AppCompatActivity.RESULT_OK -> {
Log.d(TAG, "SMS sent")
}
SmsManager.RESULT_ERROR_GENERIC_FAILURE -> {
Log.d(TAG, "Generic failure")
}
SmsManager.RESULT_ERROR_NO_SERVICE -> {
Log.d(TAG, "No service")
}
SmsManager.RESULT_ERROR_NULL_PDU -> {
Log.d(TAG, "Null PDU")
}
SmsManager.RESULT_ERROR_RADIO_OFF -> {
Log.d(TAG, "Radio off")
}
}
}
}, IntentFilter(send))
//---when the SMS has been delivered---
registerReceiver(object : BroadcastReceiver() {
override fun onReceive(arg0: Context?, arg1: Intent?) {
when (resultCode) {
AppCompatActivity.RESULT_OK -> {
Log.d(TAG, "SMS delivered")
}
AppCompatActivity.RESULT_CANCELED -> {
Log.d(TAG, "SMS not delivered")
}
}
}
}, IntentFilter(delivered))
val sms = SmsManager.getDefault()
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |