0

私は詳細アクティビティを持つアンドロイドアプリを持っています。その詳細アクティビティには、基礎となるフラグメントのタブがほとんどありません。これらの断片の1つは、クリックしたオーディオファイルを再生している各行をクリックすると、オーディオファイルの名前を持つ単純なリストです。MediaControllerが表示されないようです。

すべて正常に動作しますが、再生の進行状況や再生を停止する機能を確認したいのですが、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(); 
       } 
      } 
     }); 
+0

は 'TextView'が適切なコンポーネントではありません... – adnbsr

答えて

1

はあなたのコードでは、あなたのrefrence

については、以下のコードを確認してください、あなたはの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> 
+0

は非常に多くのパトリックありがとうございます、そのアプローチは素晴らしい仕事を! – Radek

0

私は資産フォルダからファイルを再生するにはパトリックのソリューションを少し微調整しなければならなかったが、それは素晴らしい仕事を、誰もが必要な場合は、ここで簡単にカットするためのJavaファイルを再フォーマットして貼り付けていますそれ。 anchorView代わりにSurfaceView、TextureViewなどを使用するよう

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

}

関連する問題