刚学java代码,不会写,到底怎么弄啊?弄了一下午,也不知道怎么办,真的烦死了
类名.后面应该跟静态方法或者静态变量,this是当前类的实例对象的引用,不能混用
不知道你这个问题是否已经解决, 如果还没有解决的话:public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private MediaPlayer mp= new MediaPlayer();//MediaPlayer 实例
private Button play;
private Button pause;
private Button stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play = findViewById(R.id.play);//播放按钮
pause = findViewById(R.id.pause);//暂停按钮
stop = findViewById(R.id.stop);//停止按钮
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
//动态申请权限
//判断是否有这个权限,没有就加权限
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1 );
}else{
//否则直接调用音频方法
initMediaPlayer();
}
}
//请求权限后的回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
initMediaPlayer();
}else{
Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
}
}
private void initMediaPlayer(){
//创建一个File对象指定音频的文件路径
File file = new File(Environment.getExternalStorageDirectory(),"奇妙世界.mp3");
try {
mp.setDataSource(file.getPath());//指定音频文件的路径
mp.prepare();//让MediaPlayer进入到准备状态
} catch (IOException e) {
e.printStackTrace();
}
}
//按钮点击事件
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.play:
if(!mp.isPlaying()){
mp.start();//开始播放
}
break;
case R.id.pause:
if(mp.isPlaying()){
mp.pause();
}
break;
case R.id.stop:
if(mp.isPlaying()){
mp.reset();//停止播放
initMediaPlayer();
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//将资源释放掉
if(mp != null){
mp.stop();
mp.release();
}
}
}
我们先创建了一个MediaPlayer 实例和得到三个按钮控件的实例。然后在onCreate()里面动态申请WRITE_EXTERNAL_STORAGE这个权限(因为我们要访问手机上的SD卡),做个判断,如果没有这个权限就添加这个权限,如果有,就直接调用 initMediaPlayer()这个方法。
在onRequestPermissionsResult()方法中,如果用户拒绝了权限申请,那么就调用finish()方法将程序关掉,因为没有SD卡的权限,这个程序用不了。
用户同意了权限后就会调用initMediaPlayer()方法。我们先创建一个File对象来指定音频文件的路径,从这里可以看出,我们需要事先在SD卡的根目录下放入一个音频文件,名字可以自己定义。后面分别调用setDataSource()方法和prepare()方法,得到音频文件的路径和让MediaPlayer进入到准备状态。(这里注意一下,有些人会找不到SD卡的根目录在哪,因为我也遇到过这个问题~,你可以直接把音频放在打开内部存储的第一个页面中)。
接下来就是点击事件,当你点击播放按钮的时候,会判断这个音频是否在播放,如果不在就调用start()开始播放。当你点击暂停按钮时,会判断音频是否在播放,如果在就调用pause()暂停音频。当你点击停止按钮的时候,会判断音频是否在播放,如果在播放就调用reset()将音频重置为初创建的状态,然后重新调用initMediaPlayer()方法。
最后,在onDestroy()方法中调用stop()方法和release()方法,将MediaPlayer资源释放掉。