简体   繁体   English

广播接收器在android中收不到短信?

[英]Broadcast receiver does not receive sms in android?

I am using broadcast receiver in my app to read OTP sent from server, I did not mention any permission in manifest.xml, but it does not read OTP .我在我的应用程序中使用广播接收器来读取从服务器发送的 OTP,我没有在 manifest.xml 中提到任何权限,但它没有读取 OTP 。 I don't know where the problem is.我不知道问题出在哪里。 Can someone help me to rectify it?Please help me.有人可以帮我纠正吗?请帮帮我。

public BroadcastReceiver br = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {
                Object[] pdusObj = (Object[]) bundle.get("pdus");
                assert pdusObj != null;
                for (Object aPdusObj : pdusObj) {
                    @SuppressWarnings("deprecation") SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                    String message = currentMessage.getDisplayMessageBody();

                    Log.e(s_szTAG, "Received SMS: " + message + ", Sender: " + phoneNumber);

                    // checking sms sender address....
                    if (phoneNumber.toLowerCase().contains("+919971599909".toLowerCase())) {
                        // verification code from sms
                        m_szOtpCode = getVerificationCode(message);
                        assert m_szOtpCode != null;
                        String input = m_szOtpCode.trim();

                        Log.e(s_szTAG, "OTP received: " + m_szOtpCode);
                        COTPVerificationDataStorage.getInstance().setM_szOtp(input);// getting otp from SMS and set to otpverificationstorage class

                    } else {
                        return;
                    }

                }
            }
        } catch (Exception e) {
            Log.e(s_szTAG, "Exception: " + e.getMessage());
        }
    }

    @SuppressWarnings("JavaDoc")
    private String getVerificationCode(String message) {
        String code;
        int index = message.indexOf(":");

        if (index != -1) {
            int start = index + 2;
            int length = 6;
            code = message.substring(start, start + length);
            return code;
        }
        COTPVerificationDataStorage.getInstance().setM_szOtp(m_szOtpCode);
        return null;
    }
};
private IntentFilter inf;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    m_Main = inflater.inflate(R.layout.otp_auto_verified, container, false);

    inf = new IntentFilter();
    inf.addAction("android.provider.Telephony.SMS_RECEIVED");


    getUserDetails();// getuser deatails....
    init();// initialize controls...
    return m_Main;

}

try registering the receiver尝试注册接收器

public class ReceiverSMS extends BroadcastReceiver {

   // your onReceive code
}

and in manifest..并在清单中..

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

You have to register you broadcast receiver like below and declare necessary permissions in manifest您必须像下面这样注册广播接收器并在清单中声明必要的权限

        IntentFilter mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    // mIntentFilter.setPriority(2147483647);
    registerReceiver(optReceiver, mIntentFilter);

To read SMS through BroadReciever either you could register YourReciever in manifest or in YourActivity .要通过BroadReciever读取SMS ,您可以在 manifest 或YourReciever中注册YourActivity otherwise you cant listen broadcasts.否则你不能收听广播。

permission needed需要许可

<uses-permission android:name="android.permission.RECEIVE_SMS" />

static registration静态注册

<receiver android:name=".YourSmsReciever">
    <intent-filter android:priority="99999">
        <action android:name="android.provider.telephony.SMS_RECIEVED"></action>
    </intent-filter>
</receiver>

dynamic registration动态注册

           class YourActivity extends Activity{
    //all remaining life cycle methods will goes here

                 YourReciever yourReciever = new YourReciever;
                 public void onResume(params){
                    IntentFilter mIntentFilter = new IntentFilter();
                    mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
                    registerReceiver(yourReceiver, mIntentFilter);
                 }
                 public void onPause(params){
                    unRregisterReceiver(yourReceiver);
                 }
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM