Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';不要停止android中的媒体播放器_Android_Media Player - Fatal编程技术网

Can';不要停止android中的媒体播放器

Can';不要停止android中的媒体播放器,android,media-player,Android,Media Player,我尝试了互联网上找到的几乎所有东西,一旦媒体播放器启动,我就无法停止。我使用广播接收器,我使用短信控制媒体播放器。这是我的密码 public class Receiver extends BroadcastReceiver{ String body; String address; public static final String SMS_EXTRA_NAME="pdus"; MediaPlayer mp = new MediaPlayer(); @

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

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

                }




            }       

        }
    }
}
公共类接收器扩展了BroadcastReceiver{
弦体;
字符串地址;
公共静态最终字符串SMS_EXTRA_NAME=“pdus”;
MediaPlayer mp=新的MediaPlayer();
@凌驾
公共void onReceive(上下文、意图){
//TODO自动生成的方法存根
SharedReferences obj1=context.getSharedReferences(“mypref”,context.MODE\u PRIVATE);
字符串newstring=obj1.getString(“key1”,null);
字符串名称=新闻字符串;
Bundle bund=intent.getExtras();
字符串空格=”;
如果(bund!=null)
{
Object[]smsExtra=(Object[])bund.get(SMS\u EXTRA\u NAME);

对于(int i=0;iBroadcastReceiver
它保持活动状态约9秒,您应该不要在其中创建大操作。但是,您可以让它启动一个操作,如启动活动或服务,然后在那里播放曲目或开始下载文件…等等
如果您只想启动一个播放器而不需要用户交互,我建议您启动一个服务,然后在那里播放您想要的内容。

我花了很多时间研究这个问题,并发现: 这里的问题是,我在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);

它帮助我停止了mediaplayer。

停止播放机时有任何错误/异常吗?没有。没有错误。没有应用程序崩溃。除了媒体播放机没有停止之外,一切都很好。您是否调试并检查了mp.stop();是否真的被调用?没有。但我使用了该服务,它工作正常。无论如何,谢谢您的时间。:)是的,我知道了。我用接收器调用服务