
我尝试用 react native 调用 android 代码,基本功能是发送短信,然后读取短信发送报告,成功或者失败
但我在看代码时,对一点非常困惑,安卓在广播context.registerReceiver(new BroadcastReceiver()时,会告知是那条短信发送成功吗?
假设我非常密集的发送了 10 条短信,sendEvent(mReactContext, "sms_onDelivery", "SMS delivered");能传递 sms 的 id 或者 phoneNumber 出来吗? 我尝试直接sendEvent(mReactContext, "sms_onDelivery", phoneNumber + "SMS delivered");说无法读取本地变量,必须全局变量才行
但是全局变量的话每次调用 autoSend,不是立即将 phoneNumber 改写为最新发送的 phoneNumber 吗?
@ReactMethod public void autoSend(String phoneNumber, String message, final Callback errorCallback, final Callback successCallback) { cb_autoSend_succ = successCallback; cb_autoSend_err = errorCallback; try { // 无关代码,略过 //---when the SMS has been delivered--- context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: sendEvent(mReactContext, "sms_onDelivery", "SMS delivered"); // 这怎么知道发送成功的是哪个短信?能传递 phoneNumber 出来吗? break; case Activity.RESULT_CANCELED: sendEvent(mReactContext, "sms_onDelivery", "SMS not delivered"); break; } } }, new IntentFilter(DELIVERED)); 1 susunus 2021 年 3 月 14 日 via iPhone 广播监听到短信变化后,contentprovider 读下? |
2 MapHacker 2021 年 3 月 14 日 PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent(SENT), 0); 这个 ew Intent(SENT)可以调用 putExtra 方法存一些数据,可以试试呢 然后在 onReceive 通过 arg1.getExtra 取到对应的值,不知道是否可行 |
3 gamesover OP @MapHacker 服! https://stackoverflow.com/a/4640066/2251303 后面有人评论里提到和你一样的办法 还有一个就是 PendingIntent.getBroadcast(context, `0`, new Intent(SENT), 0),第二个参数可以改为任意数字,那么我直接 pass sms 的数据库 id 就可以了 |
4 gamesover OP 不好意思,继续更正一下,https://stackoverflow.com/a/36408330/2251303 requstcode 无法在接受广播时提取,但是不同的 requstcode 还是有意义的 |