Search code examples
androidservicestartup

cannot start my service when receive SMS


I have a COMPLETED ON BOOT service in which a music starts immediately should I receive an SMS.

Am I doing something wrong?

public class MyService extends Service {

final MediaPlayer mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.son1);

private final BroadcastReceiver receiver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();
          if(action.equals("android.provider.Telephony.SMS_RECEIVED")){
             AudioManager mAudioManager = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE);
             mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
                           mPlayer.start();
          }
       }
    };

}


<service android:name=".MyService"/>
    <receiver android:name=".AutoStart">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

Solution

  • I suggest you to use android:priority="999" in your AndroidManifest.xml as follows,

    <receiver
            android:name="com.application.reciever.SMSReceiver"
            class="com.application.reciever.SMSReceiver" android:exported="true">
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
    </receiver>
    

    This way your application get's priority on SMS Receive event.

    public class SMSReceiver extends BroadcastReceiver 
    {
          @Override
          public void onReceive(Context mContext, Intent intent) 
          {
              // Your code to play music
          } 
    }