2015-08-03 94 views
0

我正在用android studio编程媒体播放器。它有3个选项: 1.play 2.stop 3.pause ...播放和停止作品。但是,当我点击暂停它不起作用,然后停止不起作用,音乐连续播放! 它在MainActivity代码:编程媒体播放器,但暂停不工作

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b1= (Button) findViewById(R.id.play); 
    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(MainActivity.this,PlayAndPause.class); 
      startService(i); 
      a=1; 
     } 
    }); 
    Button b2 = (Button) findViewById(R.id.stop); 
    b2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i= new Intent(MainActivity.this,PlayAndPause.class); 
      stopService(i); 
     } 
    }); 
    Button b3= (Button) findViewById(R.id.pause); 
    b3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(MainActivity.this,PlayAndPause.class); 
      startService(i); 
      a=2; 
     } 
    }); 
} 

和它的PlayandPause服务:

public class PlayAndPause extends Service { 
MediaPlayer mp; 
@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 
    mp=MediaPlayer.create(this,R.raw.s); 
    if(MainActivity.a==1) 
     mp.start(); 
    if(MainActivity.a==2) { 
     mp.pause(); 
    } 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mp.stop(); 
} 

请帮助!谢谢。

回答

0

首先
您必须在MediaPlayer初始化更改为MainActivityService.onCreate()事件。

改变这一行的问题是:

mp=MediaPlayer.create(this,R.raw.s); 

pause()一个MediaPlayer同比增长必须使用相同的情况下,你的start()所以保持基准。

二:
正如我所看到的,你的应用程序必须暂停音乐,如果你点击两次暂停按钮,同比检查您PlayAndPauseMainActivitya变量,因此,您必须在调用前更改a可变标志目的:

b3.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     a=2; // here!!! 
     Intent i = new Intent(MainActivity.this,PlayAndPause.class); 
     startService(i); 
    } 
}); 

此外,在您的播放按钮,一个人必须工作,因为你初始化a=1地方。

b1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     a=1; // here!!! 
     Intent i = new Intent(MainActivity.this,PlayAndPause.class); 
     startService(i); 
    } 
}); 

而且,更容易,更清晰,你可以put an extra String to your intent,例如,声明的意图后:

i.putExtra("ACTION", "PAUSE"); 

然后获取数据:

Bundle extras = getIntent().getExtras(); 
String action = extras.getString("ACTION") 
+0

谢谢回答。但它不起作用! :( – dashsiamak

+0

嗯...我看...这是因为你每次调用服务时初始化'MediaPlayer' ...并且你必须每次都使用相同的实例!!!把'mp = MediaPlayer.create(this, R.raw.s);'in'onCreate()'或者在MainActivity中声明并初始化它,在服务中使用'pause()'或'play()' –

+0

我首先使用了额外的部分,但它有错误在获取意图:无法解决方法'getintent()' – dashsiamak