Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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_Android Pendingintent_Android Broadcastreceiver_Smsmanager - Fatal编程技术网

Android 发送未接收到的sms广播

Android 发送未接收到的sms广播,android,android-pendingintent,android-broadcastreceiver,smsmanager,Android,Android Pendingintent,Android Broadcastreceiver,Smsmanager,我必须发送短信,并在交付时执行一些操作,我使用广播挂起意图来广播状态,如下所示 BroadcastReceiver smsStatusReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction();} }; @Override

我必须发送短信,并在交付时执行一些操作,我使用广播挂起意图来广播状态,如下所示

BroadcastReceiver smsStatusReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();}
};

@Override
    protected void onCreate(Bundle savedInstanceState) {
        mBroadcastManager = LocalBroadcastManager.getInstance(this);
        mBroadcastManager.registerReceiver(smsStatusReceiver, new IntentFilter(ACTION_SENT));
        mBroadcastManager.registerReceiver(smsStatusReceiver, new IntentFilter(ACTION_DELIVERED));

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Utils.sendSMS(MainActivity.this, "123456", "test", ACTION_SENT, ACTION_DELIVERED);
            }
        });
    }
在乌提尔

public static void sendSMS(Activity activity, String destination, String text, String sentAction, String deliveryAction) {    
        PendingIntent sentPI = null;
        PendingIntent deliveredPI = null;
        if (!TextUtils.isEmpty(sentAction)) {
            sentPI = PendingIntent.getBroadcast(activity, 0, new Intent(sentAction), 0);
        }
        if (!TextUtils.isEmpty(deliveryAction)) {
            deliveredPI = PendingIntent.getBroadcast(activity, 500, new Intent(deliveryAction), 0);
        }
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(destination, null, text, sentPI, deliveredPI);
    }
虽然sms已成功发送,但从未调用onReceive(),在文档中找不到任何不直接的内容。
知道发生了什么吗?

您是否已将您的BroadcastReceiver添加到Manifest类中

<receiver android:name=".receiver">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
</receiver>

当使用
SMS.sendTextMessage(电话号码,null,message,sentPI,null)发送短信息时,您可以提供待处理的意图(
sentPI
),以便在收到该意图时得到通知

如果不为NULL,则在将邮件发送给收件人时广播此挂起内容。状态报告的原始pdu位于扩展数据(“pdu”)中。

您可以将BroadcastReceiver作为挂起内容提供:

Intent intentWithData = new Intent(context, SMSDeliveredBroadcastReceiver.class);
intentWithData.putExtra("number",number);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 7, intentWithData, 0);

您需要在
上下文中注册接收机,而不是在
本地广播管理器中注册接收机。从这两行的开头删除
mBroadcastManager.
。请注意,如果您的网络不支持交付报告,则您可能根本无法获得交付的
操作
广播。当您长期依赖实用程序时,会发生这种情况:)谢谢