Android onReceive()不会与传入的SMS一起触发
我试图读取传入的文本消息,并根据SMS中的文本执行一些操作,但未触发onReceive()方法 清单文件Android onReceive()不会与传入的SMS一起触发,android,broadcastreceiver,Android,Broadcastreceiver,我试图读取传入的文本消息,并根据SMS中的文本执行一些操作,但未触发onReceive()方法 清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dost.anshdeep.dosti"> <uses-permission android:name="
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dost.anshdeep.dosti">
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<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"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Ringing"
android:label="@string/title_activity_ringing"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="com.dost.anshdeep.dosti.Ringing" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Alarms"
android:label="@string/title_activity_alarms"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="com.dost.anshdeep.dosti.Alarms" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver android:name=".SmsListener">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
SmsListener.java
public class SmsListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"Hello",Toast.LENGTH_LONG).show();
//Log.d("Message Received : ",msgBody);
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle = intent.getExtras(); //---get the SMS message passed in---
SmsMessage[] msgs = null;
if (bundle != null){
//---retrieve the SMS message received---
try{
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for(int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
String msg_from = msgs[i].getOriginatingAddress();
String msgBody = msgs[i].getMessageBody();
}
}catch(Exception e){
Log.d("Exception caught", e.getMessage());
}
}
}
//Toast.makeText(context,msg_from,Toast.LENGTH_LONG);
}
}
公共类SmsListener扩展广播接收器{
@凌驾
公共void onReceive(上下文、意图){
Toast.makeText(上下文“Hello”,Toast.LENGTH_LONG).show();
//Log.d(“收到的消息:”,msgBody);
if(intent.getAction().equals(“android.provider.Telephony.SMS_RECEIVED”)){
Bundle Bundle=intent.getExtras();//---获取传入的SMS消息---
SmsMessage[]msgs=null;
if(bundle!=null){
//---检索收到的SMS消息---
试一试{
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(inti=0;i请尝试在清单中这样声明您的BroadcastReceiver
<receiver
android:name=".SmsReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="2332412">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
}
注意:不要复制整个代码,它包含我声明的变量。只需遵循代码并根据API 23及以上版本的neeed编写自己的代码,您还应该获得在运行时接收SMS的权限。请注意,如果另一个应用程序声明广播接收器以更高的优先级和如果不传递意图,则所有低优先级广播接收器都不会收到意图。已知Handcent SMS会这样做。我非常感谢您的帮助Arshad,但它对我不起作用。我希望知道我的代码不起作用的原因。仍然不会调用onReceive()。任何帮助都将不胜感激。
public class SmsReceiver extends BroadcastReceiver {
private static final String TAG = SmsReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "Checking Sms");
Bundle bundle = intent.getExtras();
try{
if(bundle != null){
Object[] pdusObj = (Object[]) bundle.get("pdus");
for (Object aPdusObj : pdusObj) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
String senderAddress = currentMessage.getDisplayOriginatingAddress();
String message = currentMessage.getDisplayMessageBody();
Log.e(TAG, "Received SMS: " + message + ", Sender: " + senderAddress);
if (!senderAddress.toLowerCase().contains(GlobalFunctions.SMS_ORIGIN.toLowerCase())) {
return;
}
// verification code from sms
String verificationCode = getVerificationCode(message);
Log.e(TAG, "OTP received: " + verificationCode);
if(AppController.isActivityVisible()) {
Intent smsService = new Intent(context, SmsService.class);
smsService.putExtra("otp", verificationCode);
context.startService(smsService);
}
}
}
} catch (Exception e){
Log.e(TAG, "Exception");
e.printStackTrace();
}
}