【发布时间】:2017-05-17 06:31:27
【问题描述】:
我目前正在开发与 SMS 相关的应用程序。需要检测电话何时不在服务区,以及电话何时到达服务区发送待处理消息。现在我能够找到所有网络/WIFI/移动数据连接接收器,但我想要一个接收器,当移动设备恢复移动蜂窝 sim 网络时调用它。任何帮助将不胜感激。
【问题讨论】:
标签: android broadcastreceiver telephonymanager
我目前正在开发与 SMS 相关的应用程序。需要检测电话何时不在服务区,以及电话何时到达服务区发送待处理消息。现在我能够找到所有网络/WIFI/移动数据连接接收器,但我想要一个接收器,当移动设备恢复移动蜂窝 sim 网络时调用它。任何帮助将不胜感激。
【问题讨论】:
标签: android broadcastreceiver telephonymanager
我认为当蜂窝连接恢复时不会存在这样的广播。
您可以看到 Android 的 MMS 代码如何处理未在此处发送的 MMS 消息: https://android.googlesource.com/platform/packages/apps/Mms/+/master/src/com/android/mms/transaction/RetryScheduler.java
具体来说,他们设置了一个 AlarmManager 以在一段时间后重试,如果有 X 次尝试失败,他们会在消息传递数据库中将消息标记为未传递:
long retryAt = cursor.getLong(cursor.getColumnIndexOrThrow(PendingMessages.DUE_TIME));
Intent service = new Intent(TransactionService.ACTION_ONALARM, null, context, TransactionService.class);
PendingIntent operation = PendingIntent.getService(context, 0, service, PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC, retryAt, operation);
另外,您应该注册到BOOT_RECEIVED 广播,并检查是否有任何需要重试的失败短信。
【讨论】: