首页 文章

MediaController似乎没有显示出来

提问于
浏览
0

我有一个带有详细活动的Android应用程序,该详细活动几乎没有带有底层片段的选项卡 . 当我点击我正在播放点击的音频文件的每一行时,其中一个片段是带有音频文件名称的普通列表 .

一切正常,但我希望有一些方法可以看到播放的进度和停止播放的能力,我试图添加MediaController,但即使我正在创建它没有错误,屏幕上也看不到媒体控制 .

我不确定我是否以正确的方式做任何帮助你都会受到赞赏 .

非常感谢,拉德克

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    try {
       if(convertView == null){
           convertView = layoutInflater.inflate(R.layout.audio_row,parent,false);
       }
        TextView textView = (TextView) convertView.findViewById(R.id.rowText);
        textView.setText("" + jsonAudio.getJSONObject(position).getString("description"));

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    String audioFileName = jsonAudio.getJSONObject(position).getString("file");
                    Toast.makeText(context, "audio item clicked: " + audioFileName, Toast.LENGTH_SHORT).show();

                    AssetFileDescriptor descriptor = context.getAssets().openFd(audioFileName);
                    long start = descriptor.getStartOffset();
                    long end = descriptor.getLength();
                    MediaPlayer mediaPlayer=new MediaPlayer();
                    mediaPlayer.setDataSource(descriptor.getFileDescriptor(), start, end);
                    mediaPlayer.prepare();

                    // not doing really anything
                    MediaController mediaController = new MediaController(context);
                    mediaController.setAnchorView(v);

                    mediaPlayer.start();

                }  catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

2 回答

  • 0

    请查看以下代码以获取您的参考

    在你的代码中你传递了MediaController中的TextView,需要传递SurfaceView而不是TextView,你需要在MediaController中设置MediaPlayer

    JAVA文件 .

    import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; import android.util.Log;
    
    import android.media.MediaPlayer.OnPreparedListener; import android.view.MotionEvent; import android.widget.MediaController; import android.widget.TextView;
    
    import java.io.IOException;
    
    public class AudioPlayer extends Activity implements OnPreparedListener, MediaController.MediaPlayerControl{ private static final String TAG = "AudioPlayer";
    
    public static final String AUDIO_FILE_NAME = "audioFileName";
    
    private MediaPlayer mediaPlayer; private MediaController mediaController; private String audioFile;
    
    private Handler handler = new Handler();
    
    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.audio_player);
    audioFile = this.getIntent().getStringExtra(AUDIO_FILE_NAME);
    ((TextView)findViewById(R.id.now_playing_text)).setText(audioFile);
    
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setOnPreparedListener(this);
    
    mediaController = new MediaController(this);
    
    try {
    mediaPlayer.setDataSource(audioFile);
    mediaPlayer.prepare();
    mediaPlayer.start();
    } catch (IOException e) {
    Log.e(TAG, "Could not open file " + audioFile + " for playback.", e);
    }
    }
    
    @Override protected void onStop() { super.onStop(); mediaController.hide(); mediaPlayer.stop(); mediaPlayer.release(); }
    
    @Override public boolean onTouchEvent(MotionEvent event) { //the MediaController will hide after 3 seconds - tap the screen to make it appear again mediaController.show(); return false; }
    
    //--MediaPlayerControl methods---------------------------------------------------- public void start() { mediaPlayer.start(); }
    
    public void pause() { mediaPlayer.pause(); }
    
    public int getDuration() { return mediaPlayer.getDuration(); }
    
    public int getCurrentPosition() { return mediaPlayer.getCurrentPosition(); }
    
    public void seekTo(int i) { mediaPlayer.seekTo(i); }
    
    public boolean isPlaying() { return mediaPlayer.isPlaying(); }
    
    public int getBufferPercentage() { return 0; }
    
    public boolean canPause() { return true; }
    
    public boolean canSeekBackward() { return true; }
    
    public boolean canSeekForward() { return true; } //--------------------------------------------------------------------------------
    
    public void onPrepared(MediaPlayer mediaPlayer) { Log.d(TAG, "onPrepared"); mediaController.setMediaPlayer(this); mediaController.setAnchorView(findViewById(R.id.main_audio_view));
    
        handler.post(new Runnable() {
        public void run() {
        mediaController.setEnabled(true);
        mediaController.show();
        }
        });
    } }
    

    XML文件 -

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_audio_view" android:layout_width="match_parent" 
    android:layout_height="wrap_content" android:layout_gravity="center" 
    android:orientation="vertical"> <TextView 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:layout_gravity="center" android:text="Now playing:" 
    android:textSize="25sp" android:textStyle="bold" /> <TextView 
    android:id="@+id/now_playing_text" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_marginTop="20dip" 
    android:layout_marginLeft="10dip" android:layout_marginRight="10dip" 
    android:layout_gravity="center" android:text="Now playing.." 
    android:textSize="16sp" android:textStyle="italic" /> </LinearLayout>
    
  • 1

    我不得不调整Patrick的解决方案,从资源文件夹中播放文件,但它工作得很好,这里是重新格式化的java文件,如果有人需要它,可以轻松剪切和粘贴 .

    import android.content.res.AssetFileDescriptor;
    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.media.MediaPlayer.OnPreparedListener;
    import android.view.MotionEvent;
    import android.widget.MediaController;
    import android.widget.TextView;
    import java.io.IOException;
    
    public class MediaPlayer extends AppCompatActivity implements OnPreparedListener, MediaController.MediaPlayerControl {
    
    private static final String TAG = "AudioPlayer";
    private android.media.MediaPlayer mediaPlayer;
    private MediaController mediaController;
    private String audioFileName = "item1_audio1.mp3";;
    private Handler handler = new Handler();
    
    
    public void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_audio_view);
    
        ((TextView) findViewById(R.id.now_playing_text)).setText(audioFileName);
    
        mediaPlayer = new android.media.MediaPlayer();
        mediaPlayer.setOnPreparedListener(this);
    
        mediaController = new MediaController(this);
    
        try {
            AssetFileDescriptor descriptor = MediaPlayer.this.getAssets().openFd(audioFileName);
            long start = descriptor.getStartOffset();
            long end = descriptor.getLength();
            mediaPlayer.setDataSource(descriptor.getFileDescriptor(), start, end);
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (IOException e) {
            Log.e(TAG, "Could not open file " + audioFileName + " for playback.", e);
        }
    
    }
    
    @Override
    public void onPrepared(android.media.MediaPlayer mp) {
        Log.d(TAG, "onPrepared");
        mediaController.setMediaPlayer(this);
        mediaController.setAnchorView(findViewById(R.id.main_audio_view));
    
        handler.post(new Runnable() {
            public void run() {
                mediaController.setEnabled(true);
                mediaController.show();
            }
        });
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        mediaController.hide();
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) { //the MediaController will hide after 3 seconds - tap the screen to make it appear again
        mediaController.show();
        return false;
    }
    
    public void start() {
        mediaPlayer.start();
    }
    
    public void pause() {
        mediaPlayer.pause();
    }
    
    public int getDuration() {
        return mediaPlayer.getDuration();
    }
    
    public int getCurrentPosition() {
        return mediaPlayer.getCurrentPosition();
    }
    
    public void seekTo(int i) {
        mediaPlayer.seekTo(i);
    }
    
    public boolean isPlaying() {
        return mediaPlayer.isPlaying();
    }
    
    public int getBufferPercentage() {
        return 0;
    }
    
    public boolean canPause() {
        return true;
    }
    
    public boolean canSeekBackward() {
        return true;
    }
    
    public boolean canSeekForward() {
        return true;
    }
    
    @Override
    public int getAudioSessionId() {
        return 0;
    }
    
    
    @Override
    public void onStart() {
        super.onStart();
    }
    

    }

相关问题