Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何收听服务内部发送的SMS广播?_Android_Broadcastreceiver_Android Service_Smsmanager - Fatal编程技术网

Android 如何收听服务内部发送的SMS广播?

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

我正在尝试从后台服务发送短信,并在发送时执行一些操作

发送短信很有效。但是我的广播接收器的OnReceive方法即使在发送SMS时也不会被调用

我已经用其他动作测试了广播接收器,它工作正常

例如,添加操作“android.intent.action.SCREEN\u OFF”效果很好

它只能与我在挂起内容中发送的自定义操作“SMS_DELIVERED”一起工作

下面是我的代码:

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
仍在两台设备上按预期工作。