0

세부 활동에 안드로이드 앱이 있으며 세부 활동에 기본 조각이있는 탭이 거의 없습니다. 이러한 조각 중 하나는 클릭 한 오디오 파일을 재생할 때 각 줄을 클릭 할 때 오디오 파일 이름이있는 일반 목록입니다.MediaController가 표시되지 않는 것 같습니다.

모든 것이 정상적으로 작동하지만 재생을 중단하고 재생을 중지 할 수있는 방법이 필요합니다. MediaController를 추가하려고했지만 오류없이 미디어를 만들었습니다. 화면에 표시됩니다.

올바른 방법으로 도움을 주신다면 잘 모르겠습니다.

덕분에 많이 라덱

당신이를 MediaController의 텍스트 뷰를 통과 한 코드에서 당신에 refrence

을 위해 아래의 코드를 확인하시기 바랍니다

@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(); 
       } 
      } 
     }); 
+0

는'TextView'가 anchorView 대신 등의 서피스 뷰 SurfaceView, TextureView를 사용할 때 적절한 구성 요소가 아닙니다 ... – adnbsr

답변

1

대신 텍스트 뷰와의 서피스 뷰 SurfaceView를 통과해야 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> 
+0

매우 패트릭 감사합니다, 그 접근 방식은 큰 일! – Radek

0

나는 자산 폴더에서 파일을 재생 패트릭의 솔루션을 약간 조정할했지만, 쉽지 인하, 여기에서 다시 포맷 자바 파일을 좋은 일을하고 사람이 필요로하는 경우 붙여 넣기 그것.

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

은}