I want to make an audio player in a fragment for my app. Seems like there is no error to my xml file. There is no problem there. Just in my java file. I followed a youtube video on how to implement audio player in android studio. ref: https://www.youtube.com/watch?v=rJ3XbXtjNaE&t=133s . In the video, he/she does not use fragment instead just an activity. I want to put my audio player in my fragment so there is some changes in code. But i don't know how to change the code for fragment.
How to fix this error.
I got error: Cannot resolve method 'create(com.example.jagi.Med1Fragment, int)'
this is my code.
Med1Fragment.java
package com.example.jagi;
import android.annotation.SuppressLint;
import android.media.Image;
import android.media.MediaPlayer;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.concurrent.TimeUnit;
public class Med1Fragment extends Fragment {
TextView playerposition, playerduration;
SeekBar seekBar;
ImageView btnrew, btnplay, btnpause, btnff;
MediaPlayer mediaPlayer;
Handler handler = new Handler();
Runnable runnable;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
playerposition = playerposition.findViewById(R.id.player_position);
playerduration = playerduration.findViewById(R.id.player_duration);
seekBar = seekBar.findViewById(R.id.seek_bar);
btnrew = btnrew.findViewById(R.id.bt_rew);
btnplay = btnplay.findViewById(R.id.bt_play);
btnpause = btnpause.findViewById(R.id.bt_pause);
btnff = btnff.findViewById(R.id.bt_ff);
mediaPlayer = MediaPlayer.create(getActivity(), R.raw.meditation2);
runnable = new Runnable() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
handler.postDelayed(this, 500);
}
};
int duration = mediaPlayer.getDuration();
String sDuration = convertFormat(duration);
playerduration.setText(sDuration);
btnplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnplay.setVisibility(View.GONE);
btnpause.setVisibility(View.VISIBLE);
mediaPlayer.start();
seekBar.setMax(mediaPlayer.getDuration());
handler.postDelayed(runnable,0);
}
});
btnpause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnpause.setVisibility(View.GONE);
btnplay.setVisibility(View.VISIBLE);
mediaPlayer.pause();
handler.removeCallbacks(runnable);
}
});
btnff.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int currentposition = mediaPlayer.getCurrentPosition();
int duration = mediaPlayer.getDuration();
if(mediaPlayer.isPlaying() && duration != currentposition){
currentposition = currentposition + 5000;
playerposition.setText(convertFormat(currentposition));
mediaPlayer.seekTo(currentposition);
}
}
});
btnrew.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int currentposition = mediaPlayer.getCurrentPosition();
if(mediaPlayer.isPlaying() && currentposition > 5000){
currentposition = currentposition - 5000;
playerposition.setText(convertFormat(currentposition));
mediaPlayer.seekTo(currentposition);
}
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser){
mediaPlayer.seekTo(progress);
}
playerposition.setText(convertFormat(mediaPlayer.getCurrentPosition()));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
btnpause.setVisibility(View.GONE);
btnplay.setVisibility(View.VISIBLE);
mediaPlayer.seekTo(0);
}
});
}
@SuppressLint("DefaultLocale")
private String convertFormat(int duration){
return String.format("%02d:%02d"
, TimeUnit.MILLISECONDS.toMinutes(duration)
, TimeUnit.MILLISECONDS.toSeconds(duration) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_med1, container, false);
return v;
}
}
the error is at
mediaPlayer = MediaPlayer.create(this, R.raw.meditation2);
fragment_med1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:background="@drawable/scene"
tools:context=".Med1Fragment">
<ImageView
android:layout_width="match_parent"
android:layout_height="250dp"
android:src="@drawable/ic_baseline_music_note_24"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/player_position"
android:text="00:00"
android:textStyle="bold"
android:textColor="@android:color/white"/>
<SeekBar
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/seek_bar"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/player_duration"
android:text="00:00"
android:textStyle="bold"
android:textColor="@android:color/white"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/bt_rew"
android:src="@drawable/ic_baseline_fast_rewind_24"/>
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/bt_play"
android:src="@drawable/ic_baseline_play_circle_filled_24"/>
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/bt_pause"
android:src="@drawable/ic_baseline_pause_circle_filled_24"/>
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/bt_ff"
android:src="@drawable/ic_baseline_fast_forward_24"/>
</LinearLayout>
</LinearLayout>
please help.