无法在Android中停止Media Player

时间:2015-11-12 13:41:45

标签: android media-player

我尝试了几乎所有在互联网上找到的东西,一旦启动就无法阻止媒体播放器。我正在使用广播接收器而我正在使用SMS控制媒体播放器。这是我的代码。

 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); 
                        }
                    }

                }




            }       

        }
    }
}

当我发送“开启”时媒体播放器正在开启,但它不会关闭。是的,我已在Manifest文件中提供了所需的权限。

2 个答案:

答案 0 :(得分:1)

BroadcastReciever它保持活动约9秒,你应该在其中创建大的操作。但是,你可以让它开始像开始活动或服务这样的操作,你可以在那里播放曲目或开始下载文件...等等 如果您只想启动一个播放器而不需要用户互动,我建议您启动一项服务,并在那里播放您想要的内容。

答案 1 :(得分:1)

我花了很多时间研究这个问题,发现: 这里的问题是我在由IntentService管理的线程内创建了MediaPlayer。并且在开始播放时,该线程不再有效。

所以出路是:

final Handler handler = new Handler(getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
   mediaPlayer.start();
}
});

handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying()) {
     mediaPlayer.stop();
}
}
, 30 * 1000);

它帮助我停止了媒体播放器。