Android 接收sms时广播中的Onreceiver不工作

Android 接收sms时广播中的Onreceiver不工作,android,broadcastreceiver,Android,Broadcastreceiver,手机号onReceive()中的消息传入后,无法工作。请帮助我找到此问题的解决方案。 这是我的代码,请检查它,如果我错了请纠正我 public class IncomingSms extends BroadcastReceiver { Context con; @Override public void onReceive(Context context, Intent intent) { this.con = co

手机号onReceive()中的消息传入后,无法工作。请帮助我找到此问题的解决方案。 这是我的代码,请检查它,如果我错了请纠正我

    public class IncomingSms extends BroadcastReceiver {
        Context con;
        @Override
        public void onReceive(Context context, Intent intent) {
            this.con = context;
            if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
            {
                Log.e("IncomingSms", "onReceive..");
                final Bundle bundle = intent.getExtras();
                try {
                    if (bundle != null) {
                        for (String key : bundle.keySet())
                            Log.e("okkk", key + "//   " + bundle.getString(key));

                        final Object[] pdusObj = (Object[]) bundle.get("pdus");
                        for (int i = 0; i < pdusObj.length; i++) {
                            SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                            String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                            String senderNum = phoneNumber;
                            String message = currentMessage.getDisplayMessageBody();

                            try {
                                if (senderNum.equals("TA-DOCOMO")) {
                                    CodeVerificationActivity Sms = new CodeVerificationActivity();
                                    Sms.recivedSms(message);
                                }
                            } catch (Exception e) {
                            }

                        }
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }

    }  
   <receiver android:name=".Util.IncomingSms"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>
public class IncomingSms扩展广播接收器{
上下文con;
@凌驾
公共void onReceive(上下文、意图){
this.con=上下文;
if(intent.getAction().equals(“android.provider.Telephony.SMS_RECEIVED”))
{
Log.e(“输入短信”、“接收信息”);
final Bundle=intent.getExtras();
试一试{
if(bundle!=null){
for(字符串键:bundle.keySet())
Log.e(“okkk”,key+“/”+bundle.getString(key));
最终对象[]pdusObj=(对象[])bundle.get(“pdus”);
对于(int i=0;i
这是我使用的清单文件代码。如果我在代码中遗漏了什么,请告诉我正确的方法,然后纠正我。实际上我在android中自动读取传入消息以验证OTP。这对我来说非常重要。提前谢谢

   <receiver android:name=".Util.IncomingSms"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>

你是在吃棉花糖吗。然后从设置中允许应用的权限

   <receiver android:name=".Util.IncomingSms"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>
或者试试这个

   <receiver android:name=".Util.IncomingSms"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>
public class SMSBroadcast extends BroadcastReceiver {

final SmsManager manager = SmsManager.getDefault();

@Override
public void onReceive(Context context, Intent intent) {

    final Bundle bundle = intent.getExtras();

    try {
        if (bundle != null) {
            final Object[] pdus = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdus.length; i++) {
                SmsMessage currentmessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
                String phoneNumber = currentmessage.getDisplayOriginatingAddress();

                String message = currentmessage.getDisplayMessageBody();

                Toast.makeText(context, "number " + phoneNumber + " message :" + message, Toast.LENGTH_SHORT).show();


            }


        }


    } catch (Exception e) {
        e.printStackTrace();

    }

}
}
公共类SMSBroadcast扩展广播接收器{
最终SmsManager管理器=SmsManager.getDefault();
@凌驾
公共void onReceive(上下文、意图){
final Bundle=intent.getExtras();
试一试{
if(bundle!=null){
最终对象[]PDU=(对象[])bundle.get(“PDU”);
对于(int i=0;i
Manifest.xml

   <receiver android:name=".Util.IncomingSms"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <receiver android:name="com.inficare.avinashverma.googlecloudmessagingdemo.broadcast.SMSBroadcast">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
        </intent-filter>

    </receiver>

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

好的,首先像这样更改代码

   <receiver android:name=".Util.IncomingSms"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>
public class IncomingSms extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";
 String address;
 SmsMessage smsMessage;
public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        for (int i = 0; i < sms.length; ++i) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                String format = intentExtras.getString("format");
                 smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format);
            }
            else {
                smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
            }
           // SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

             address = smsMessage.getOriginatingAddress();



        }
       // Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();

        //this will update the UI with message
        YourActivity inst = Youractivity.instance();//write your activity 
        // where you are checking for message.
        inst.updateList(address);
    }
}
 }

你的活动课在哪里this@Override受保护的void onStart(){super.onStart();尝试{registerReceiver(new IncomingSms(),new IntentFilter(“android.provider.Telephony.SMS_RECEIVED”);}捕获(异常e){e.printStackTrace();}