我正在构建一个SMS应用程序,并且有one activity
和broadcast receiver
。问题是broadcast receiver
onReceive()
方法没有被调用。下面给出了receiver
类和manifest
文件的code
。SMS广播接收器onReceive()方法不被调用
广播接收机
public class SmsBroadcastReceiver extends BroadcastReceiver {
public AudioManager audioManager;
SharedPreferences sharedPreferences;
boolean b=false;
String smsBody;
final int REQUEST_CODE_ASK_PERMISSIONS = 123;
public static final String SMS_BUNDLE = "pdus";
SmsMessage smsMessage;
public void onReceive(Context context, Intent intent) {
Toast.makeText(context.getApplicationContext(),"Toast Long",Toast.LENGTH_LONG).show();
sharedPreferences = context.getApplicationContext().getSharedPreferences("Pritom", context.MODE_PRIVATE);
Bundle intentExtras = intent.getExtras();
String format = intentExtras.getString("format");
if (intentExtras != null) {
Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
String smsMessageStr = "";
String pass3 = sharedPreferences.getString("password", null);
for (int i = 0; i < sms.length; ++i) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format);
} else {
smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
}
smsBody = smsMessage.getMessageBody().toString();
String address = smsMessage.getOriginatingAddress();
smsMessageStr += "SMS From: " + address + "\n";
smsMessageStr += smsBody + "\n";
}
/*if (smsBody.equals("@general" + pass3)) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(audioManager.RINGER_MODE_NORMAL);
}*/
Toast.makeText(context, "SMS : " + smsBody + pass3, Toast.LENGTH_SHORT).show();
Log.d("Message:", smsBody + pass3);
}
}
}
的这里的问题是,没有被显示的正下方的onReceive()
消息Toast
这表明该方法onReceive()
不被调用。
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mytrendin.inappmessaging">
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".SmsBroadcastReceiver" android:exported="true" >
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
我已经使用Android 5.0.1
测试我的应用程序。 谢谢您的帮助:)
尝试设置优先级的android:在接收器优先=“2147483647”的意图过滤 – FAT
@DanielNugent,我有尝试过,但它没有工作:( –
在哪个活动/片段你调用这个接收器? – Ibrahim