Android 广播接收器未接收到传入的sms消息
我正在尝试使用receiver读取传入的消息。我遵循了教程并添加了以下代码,但广播接收器未被触发。onReceive中的日志从未被触发 显示Android 广播接收器未接收到传入的sms消息,android,sms,android-manifest,android-broadcastreceiver,Android,Sms,Android Manifest,Android Broadcastreceiver,我正在尝试使用receiver读取传入的消息。我遵循了教程并添加了以下代码,但广播接收器未被触发。onReceive中的日志从未被触发 显示 <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:name=".x
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application
android:name=".xyz"
android:allowBackup="true"
android:icon="@mipmap/icon_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver android:name="xyz.receiver.SmsReceiver">
<intent-filter android:priority="1">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
我已经使用了此代码,希望这也适用于您:)
我已经使用了此代码,希望这也适用于您:)
包名正确吗<代码>试着把它改成
@Darshan它是正确的..我也试过了..好的。自Android 6.0(API级别23)或Build.VERSION.SDK\u INT>=Build.VERSION\u code.M以来,请尝试在清单和意图过滤器中分别在接收器中添加这些行。您还应该在运行时检查权限。包名正确吗<代码>试着把它改成
@Darshan它是正确的..我也试过了..好的。自Android 6.0(API级别23)或Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.M以来,尝试在清单和意图过滤器中分别在接收方中添加这些行。您还应该在运行时检查权限。从4.4开始,很少有行为被更改。可能是这导致了你们这边的问题。看看这个安卓博客:从4.4开始,很少有行为改变。可能是这导致了你们这边的问题。看看这个安卓博客:
public class SmsReceiver extends BroadcastReceiver {
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Log.e("TEST",data.toString());
Object[] pdus = (Object[]) data.get("pdus");
for(int i=0;i<pdus.length;i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = smsMessage.getDisplayOriginatingAddress();
String messageBody = smsMessage.getMessageBody();
mListener.messageReceived(messageBody);
}
}
public static void bindListener(SmsListener listener) {
mListener = listener;
}
}
SmsReceiver.bindListener(new SmsListener() {
@Override
public void messageReceived(String messageText) {
Toast.makeText(OTPActivity.this, "Message: " + messageText, Toast.LENGTH_LONG).show();
}
});
private BroadcastReceiver mSMSReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
Log.e("sms receiver", "0000sdfghjkjhgfdsdfghjk");
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
String sms;
for (Object pdu : pdus) {
SmsMessage tmp;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
tmp = SmsMessage.createFromPdu((byte[]) pdu, bundle.getString("format"));
} else {
tmp = SmsMessage.createFromPdu((byte[]) pdu);
}
String senderMobile = tmp.getMessageBody();
sms = tmp.getMessageBody();
if (senderMobile.startsWith("کد فعالسازی شما در توپ 360:")) {
Log.e("sms receiver", "1111sdfghjkjhgfdsdfghjk");
final String mSMS = sms.replaceAll("[^0-9]", "");
//TODO Check SMS Center number with senderMobile if(senderMobile.equals(989100000)){...}
if (mSMS.length() == 5 || mSMS.length() == 6) {
Log.e("sms receiver", "2222sdfghjkjhgfdsdfghjk");
runOnUiThread(new Runnable() {
@Override
public void run() {
//CODE IS mSMS
code.setText(mSMS);
Log.e("sms receiver", "3333sdfghjkjhgfdsdfghjk");
}
});
abortBroadcast();
break;
}
}
}
}
}
} catch (Exception e) {
Log.e("sms exception", e.getMessage());
}
}
};
@Override
public void onResume() {
super.onResume();
if (isGranted) {
IntentFilter mIntentFilter = new IntentFilter();
Log.e("sms receiver", "4444sdfghjkjhgfdsdfghjk");
mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
mIntentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(mSMSReceiver, mIntentFilter);
} else {
Log.e("sms receiver", "5555sdfghjkjhgfdsdfghjk");
}
}
@Override
public void onPause() {
super.onPause();
if (isRegistered) {
unregisterReceiver(mSMSReceiver);
Log.e("sms receiver", "6666sdfghjkjhgfdsdfghjk");
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 100: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
isGranted = true;
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
mIntentFilter.setPriority(Integer.MAX_VALUE);
registerReceiver(mSMSReceiver, mIntentFilter);
Log.e("sms receiver", "7777sdfghjkjhgfdsdfghjk");
isRegistered = true;
onResume();
} else {
isGranted = false;
Snackbar snackbar = Snackbar.make(coordinatorLayout, "دریافت کننده خودکار پیامک غیرفعال است.", Snackbar.LENGTH_LONG);
snackbar.show();
}
return;
}
}
}