如图,按照书上的代码编写了一个音乐播放器,但是加载到手机后播放不了音乐(模拟机上也不行),一开始是出现下图这种情况,无法build.按照网上的说法,把那个targetsdkversion 改成26之后,能够build .但是播放不了音乐。求助啊求助!!谢谢!万分感谢!

解决方案 »

  1.   

    package com.example.chinayexin.player;import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.database.Cursor;
    import android.media.MediaPlayer;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.TextView;
    import android.widget.Toast;import java.io.IOException;public class MainActivity extends AppCompatActivity implements
        MediaPlayer.OnPreparedListener,
        MediaPlayer.OnErrorListener,
        MediaPlayer.OnCompletionListener{    Uri uri;
        TextView txvName ,txvUri;
        boolean isVideo = false;
        Button btnPlay,btnStop;
        CheckBox ckbLoop;
        MediaPlayer mper = new MediaPlayer();
        Toast tos;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);        //设置屏幕不转向
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);        txvName =(TextView) findViewById(R.id.txvName);
            txvUri = (TextView) findViewById(R.id.txvUri);
            btnPlay=(Button) findViewById(R.id.btnPlay);
            btnStop= (Button) findViewById(R.id.btnStop);
            ckbLoop=(CheckBox) findViewById(R.id.ckbLoop);        uri= Uri.parse("android.resource://"+getPackageCodePath()+"/"+R.raw.music);
            txvName.setText("music.mp3");
            txvUri.setText("程序内音乐:"+uri.toString());        mper=new MediaPlayer();
            mper.setOnPreparedListener(this);
            mper.setOnErrorListener(this);
            mper.setOnCompletionListener(this);
            tos=Toast.makeText(this,"",Toast.LENGTH_SHORT);        prepareMusic();
        }    void prepareMusic() {
            btnPlay.setText("播放");
            btnPlay.setEnabled(false);
            btnStop.setEnabled(false);
            try{
                mper.reset();
                mper.setDataSource(this,uri);
                mper.setLooping( ckbLoop.isChecked());
                mper.prepareAsync();
            } catch (IOException e) {
              tos.setText("指定音乐错误"+e.toString());
              tos.show();
            }
        }
        public void onPick(View view) {
            Intent it = new Intent(Intent .ACTION_GET_CONTENT);
            if(view.getId()==R.id.btnPickAudio){
                it.setType("audio/*");
                startActivityForResult(it,100);
            }
          else{
              it.setType("Vedio/*");
              startActivityForResult(it,101);
            }
        }
        protected void onActivityResult(int requestCode,int resultCode,Intent data){
            super.onActivityResult(requestCode,resultCode,data);
            if(resultCode== Activity.RESULT_OK){
                isVideo= (requestCode==101);
                uri= convertUri(data.getData());
                txvName.setText(uri.getLastPathSegment());
                txvUri.setText("文件位置:"+uri.getPath());            if(!isVideo)prepareMusic();
            }
        }    private Uri convertUri(Uri uri) {
            if(uri.toString().substring(0,7).equals("content")){
                String[] colName = {MediaStore.MediaColumns.DATA};
                Cursor cursor = getContentResolver()
                        .query(uri,colName,null,null,null);
                cursor.moveToFirst();
                uri=Uri.parse("file://"+cursor.getString(0));
                cursor.close();
            }
            return uri ;
        }    @Override
        public void onCompletion(MediaPlayer mp) {
            mper.seekTo(0);
            btnPlay.setText("播放");
            btnStop.setEnabled(false);
        }    @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            tos.setText("发生错误,停止播放");
            tos.show();        return true;
        }    @Override
        public void onPrepared(MediaPlayer mp) {
            btnPlay.setEnabled(true);
        }    public void onMpPlay(View view) {
            if(mper.isPlaying()){
                mper.pause();
                btnPlay.setText("继续");
            }
            else{
                mper.start();
                btnPlay.setText("暂停");
                btnStop.setEnabled(true);
            }    }    public void onMpStop(View view) {
            mper.pause();
            mper.seekTo(0);
            btnPlay.setText("播放");
            btnStop.setEnabled(false);
        }    public void onMpLoop(View view) {
            if (ckbLoop.isChecked())
                mper.setLooping(true);
            else
                mper.setLooping(false);
        }    public void onMpForward(View view) {
            if(!btnPlay.isEnabled())return;
            int len=mper.getDuration();
            int pos=mper.getCurrentPosition();
            pos+=10000;
            if(pos>len)pos=len;
            mper.seekTo(pos);
            tos.setText("快进10秒:"+pos/1000+"/"+len/1000);
            tos.show();
        }    public void onMpBackward(View view) {
            if(!btnPlay.isEnabled())return;
            int len=mper.getDuration();
            int pos=mper.getCurrentPosition();
            pos-=10000;
            if(pos<0)pos=0;
            mper.seekTo(pos);
            tos.setText("快退10秒"+pos/1000+"/"+len/1000);
            tos.show();
        }
        @Override
        protected void onPause() {        super.onPause();
            if(mper.isPlaying()){
                btnPlay.setText("继续");
                mper.pause();
            }
        }
        @Override
        protected void onDestroy() {
            mper.release();
            super.onDestroy();
        }
    }
      

  2.   

    提示很明显,在APP的 build.grade 文件里面的 com.android.support:media2:28.0.0 找不到,或许你可以把 28.0.0 版本号降低一点 27.0.2 或者其它