2017-05-31 120 views
0

我正在构建一个SMS应用程序,并且有one activitybroadcast receiver。问题是broadcast receiveronReceive()方法没有被调用。下面给出了receiver类和manifest文件的codeSMS广播接收器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测试我的应用程序。 谢谢您的帮助:)

+0

尝试设置优先级的android:在接收器优先=“2147483647”的意图过滤 – FAT

+0

@DanielNugent,我有尝试过,但它没有工作:( –

+0

在哪个活动/片段你调用这个接收器? – Ibrahim

回答

0

尝试在接收器intent-filter设置更高的优先级android:priority="2147483647"

<receiver android:name=".SmsBroadcastReceiver" android:exported="true" > 
    <intent-filter android:priority="2147483647" > 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 
+0

我已经这样做了,但它没有工作 –

+0

我想有一些问题'android 5.0' –

+0

我认为你的应用程序需要运行时间接收短信的权限。 – FAT

相关问题