Search code examples
androidmedia-player

Can't stop Media Player in android


I tried almost everything found on the internet and I can't stop the media player once it starts. I'm using broadcast receiver and I'm controlling the media player using SMS. Here is my code.

 public class Receiver extends BroadcastReceiver{
    String body;
    String address;
    public static final String SMS_EXTRA_NAME="pdus";
    MediaPlayer mp = new MediaPlayer();
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub


        SharedPreferences obj1=context.getSharedPreferences("mypref", Context.MODE_PRIVATE);
        String newstring=obj1.getString("key1", null);
        String name=newstring;


        Bundle bund=intent.getExtras();
        String space="";
        if(bund!=null)
        {
            Object[] smsExtra=(Object[])bund.get(SMS_EXTRA_NAME);
            for(int i=0;i<smsExtra.length;i++)
            {
                SmsMessage sms=SmsMessage.createFromPdu((byte[])smsExtra[i]);
                body=sms.getMessageBody().toString();
                address=sms.getOriginatingAddress();

                if(body.equals("ON"))
                {
                    if(mp.isPlaying())
                    {  
                        mp.stop();
                    } 

                    try {
                        mp.reset();
                        AssetFileDescriptor afd;
                        afd = context.getAssets().openFd("file.mp3");
                        mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                        mp.prepare();
                        mp.start();
                        mp.setLooping(true);
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }




                else if(body.equals("OFF"))
                {
                    if (mp.isPlaying()==true||mp!=null) 
                    {
                        try{


                            mp.stop();
                            mp.release();


                        } catch(Exception e){
                            System.out.println("Exception"+e); 
                        }
                    }

                }




            }       

        }
    }
}

The media player is turning on when I send "ON", but it won't turn off. And yes I have given the required permissions in the Manifest file.


Solution

  • The BroadcastReciever it stays alive for around 9 seconds, you should not create big operation in it. However, you can let it start an operation like start acitivty or service and there you play a track or start download a file ...etc If you want to only start a player and no need for user interaction, I suggest that you start a service and there you play your what you want.