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.
。请注意,如果您的网络不支持交付报告,则您可能根本无法获得交付的操作
广播。当您长期依赖实用程序时,会发生这种情况:)谢谢