当前位置: 首页 > 知识库问答 >
问题:

如何在广播接收机中获取短信数据

齐宗清
2023-03-14
    btnSend.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                String SENT = "sent";
                String DELIVERED = "delivered";
                Intent sentIntent = new Intent(SENT);

                /*Create Pending Intents*/
                PendingIntent sentPI = PendingIntent.getBroadcast(
                        getApplicationContext(), 0, sentIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

                /* Register for SMS send action */
                registerReceiver(new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        try {
      --->                  **SmsMessage[] smsMessage = Telephony.Sms.Intents.getMessagesFromIntent(intent);**
                            String messageBody = smsMessage[0].getMessageBody();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        int resultcode = getResultCode();
                        Log.d("  RESULT=", Integer.toString(resultcode));
                    }

                }, new IntentFilter(SENT));

                SmsManager smsManager = SmsManager.getDefault();

                if ((ContextCompat.checkSelfPermission(getApplicationContext(),
                        Manifest.permission.SEND_SMS) !=
                        PackageManager.PERMISSION_GRANTED) ||
                        (ContextCompat.checkSelfPermission(getApplicationContext(),
                                Manifest.permission.RECEIVE_SMS) !=
                                PackageManager.PERMISSION_GRANTED)){
                    ActivityCompat.requestPermissions(SMSActivity.this,
                            new String[] {
                                    Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS
                            }, 1);
                }
                smsManager.sendTextMessage(phoneNo.getText().toString(), null,
                                                msg.getText().toString(), sentPI, null);
            } catch (Exception ex) {
                Toast.makeText(getApplicationContext(),
                        ex.getMessage(), Toast.LENGTH_LONG)
                        .show();
                ex.printStackTrace();
            }
        }
    });
W/System.err: java.lang.NullPointerException: Attempt to get length of null array
W/System.err:     at android.provider.Telephony$Sms$Intents.getMessagesFromIntent(Telephony.java:1345)
W/System.err:     at com.jdot.jsontest.SMSActivity$1$1.onReceive(SMSActivity.java:60)
W/System.err:     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:993)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:158)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7224)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<receiver android:name="MyBroadcastListener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null) {
 //---retrieve the SMS message received---
 Object[] pdus = (Object[]) bundle.get("pdus");
 msgs = new SmsMessage[pdus.length];
 for (int i=0; i<msgs.length; i++){
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
      str += "SMS from " + msgs[i].getOriginatingAddress();
              str += " :";
              str += msgs[i].getMessageBody().toString();
              str += "\n";
    }
//---display the new SMS message---
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
  1. 清单中是否需要receiver/intent-filter块,如果需要,如何在第一行中命名侦听器?
  2. 在onReceive()中无法收到传入消息副本的可能原因是什么?我应该做些什么来更正它?
  3. 我是否需要发送消息并在onReceive()中“捕获它”以便可靠地获得设备的电话号码,或者我是否可以从用户那里请求读取SMS的权限,然后只需读取第一条消息即可获得传入的电话号码?

请注意,我已经通读了所有类似的问题,还没有找到答案。

共有1个答案

范峰
2023-03-14
registerReceiver(..., new IntentFilter(SENT));
    null
 类似资料:
  • 本文向大家介绍Android BroadcastReceiver接收收到短信的广播,包括了Android BroadcastReceiver接收收到短信的广播的使用技巧和注意事项,需要的朋友参考一下 一、知识介绍   1、broadcastReceiver是广播接受者,四大组件之一。   2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。   3、使用场景:  

  • 我正在尝试设置一个类来接收短信和发送状态。以下是我的清单如何查找此任务: 我收到了收到的消息,但没有收到发送的消息,我的清单声明有问题吗?

  • 本文向大家介绍Android广播接收机制详细介绍(附短信接收实现),包括了Android广播接收机制详细介绍(附短信接收实现)的使用技巧和注意事项,需要的朋友参考一下 Android中广播(BroadcastReceiver)的详细讲解. 1. BroadcastReceiver的注册过程: (1).广播消息发出来后,只有订阅了该广播的对象才会接收发出来的广播消息并做出相应处理。 **(2).**

  • 嗨,我试图捕捉短信内容和使用我的应用程序,所以我做了一个广播接收器与许可和清单,但当设备接收短信,我的代码不运行,这意味着广播接收器不发射。我也查了这里里里外外的很多文章,有一些: Android短信接收结果到主要活动短信接收不工作 我还尝试在活动onCreate()中动态注册接收器,但没有任何变化 有人知道问题出在哪里吗?它应该只是庆祝一个消息被累犯,这样我就可以继续工作,但接收器似乎甚至没有发

  • 我是android新手。我的项目有一个活动和一个服务。我的服务有一个广播接收器,而活动有一个广播发送器,它在PeriodSender方法中。动态地,当我注册接收者时,在服务开始时它不会调用,但是如果我在几分钟后发送了一些东西,它就会调用。但是我想在清单中注册它,我已经在清单中包含了接收方的详细信息,但是接收方没有调用。我的接收方类名是MyReceiver21,意图操作是My_ACTION1。实际上

  • 我正在尝试拥有自己的蓝牙kotlin实现,但遇到了一个问题。 我正在按照这里的kotlin教程启动一个用于扫描蓝牙设备的广播接收器。 问题是,当我试图从广播接收器将每个发现的设备添加到主活动范围内的可变列表中,以便将列表发送到颤振端时,我总是得到一个空值。 由于我是kotlin和android的新手,我无法真正理解我到底哪里出错了,以及我需要了解哪些概念才能做我需要做的事情。 Kotlin主要活动