Android 如何收听服务内部发送的SMS广播?
我正在尝试从后台服务发送短信,并在发送时执行一些操作 发送短信很有效。但是我的广播接收器的OnReceive方法即使在发送SMS时也不会被调用 我已经用其他动作测试了广播接收器,它工作正常 例如,添加操作“android.intent.action.SCREEN\u OFF”效果很好 它只能与我在挂起内容中发送的自定义操作“SMS_DELIVERED”一起工作 下面是我的代码:Android 如何收听服务内部发送的SMS广播?,android,broadcastreceiver,android-service,smsmanager,Android,Broadcastreceiver,Android Service,Smsmanager,我正在尝试从后台服务发送短信,并在发送时执行一些操作 发送短信很有效。但是我的广播接收器的OnReceive方法即使在发送SMS时也不会被调用 我已经用其他动作测试了广播接收器,它工作正常 例如,添加操作“android.intent.action.SCREEN\u OFF”效果很好 它只能与我在挂起内容中发送的自定义操作“SMS_DELIVERED”一起工作 下面是我的代码: public class SendMessageService extends Service { private
public class SendMessageService extends Service {
private static final String TAG = "SendMessageService";
public static final String SMS_DELIVERED = "SMS_DELIVERED";
private BroadcastReceiver deliveryBroadcastReceiver = null;
@Override
public void onCreate() {
super.onCreate();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(SMS_DELIVERED);
intentFilter.setPriority(100);
deliveryBroadcastReceiver = new DeliverReceiver();
registerReceiver(deliveryBroadcastReceiver, intentFilter);
Log.d(TAG, "Service onCreate: deliveryBroadcastReceiver is registered.");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
String phoneNumber = extras.getString("PHONE_NUMBER");
String msg = extras.getString("msg");
sendSMS(phoneNumber, msg);
Log.d(TAG, "onStartCommand: Sent SMS");
return START_STICKY;
}
private void sendSMS (String phoneNumber, String msg){
PendingIntent deliveredPI = PendingIntent.getBroadcast(getApplicationContext(), 0,
new Intent(SMS_DELIVERED), 0);
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, msg, null, deliveredPI);
}
public class DeliverReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
Log.d(TAG, "onReceive: Delivered onReceive called");
// Do something here
}
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(deliveryBroadcastReceiver);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
上面的代码实际上很好。问题似乎是我的电信运营商(EthioTel)没有提供可靠的短信发送报告。您的代码看起来不错。不过,并非所有运营商都提供送货报告,如果你的运营商不提供,那么送货
pendingent
就永远不会启动。你确定你的承运人提供了交货报告吗?如果只是为了测试,您临时通过了已发送的pendingent
的deliveredPI
,会发生什么情况?也就是说,smsmsmanager.sendTextMessage(phoneNumber,null,msg,deliveredPI,null)
。着火了吗?谢谢,迈克。我试过你说的话,听筒响了。所以我想问题出在我们的运营商身上。以防万一有人来找我:我有一个pendingent
的短信发送功能,在我升级到安卓11之前,它一直工作得很好。我还没有找到任何关于这个问题的信息,但是安卓10的像素4a可以正常工作,而安卓11的像素4则不行。发送的短信息pendingents
仍在两台设备上按预期工作。