[英]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.