В android студии я сделал gridView, который показывает изображение, и каждое изображение связано со своим собственным звуком, и оно работает, но если я добавлю в видоизменяющее устройство громкость, он больше не будет воспроизводить звук. есть идеи, как сделать чейнджер громкости и изображение независимыми в виде сетки?
Вид (это линейное расположение)
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image1"
android:layout_gravity="center"
/>
<SeekBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
адаптер
public class SoundAdapter extends ArrayAdapter<sound> {
SoundAdapter(Context context, int resource, List<sound> objects) {
super(context, resource, objects);
}
public View getView(int position, View convertView, ViewGroup parent) {
// Check if the existing view is being reused, otherwise inflate the view
LinearLayout ListItemView = (LinearLayout) convertView;
if (ListItemView == null) {
ListItemView = (LinearLayout) LayoutInflater.from(getContext()).inflate(
R.layout.custom_list_view, parent, false);
}
sound currentSound = getItem(position);
// Find the ImageView in the list_item.xml layout with the ID list_item_icon
ImageView iconView = ListItemView.findViewById(R.id.image1);
iconView.setImageResource(currentSound.getPhoto());
iconView.setVisibility(View.VISIBLE);
return ListItemView;
}}
Основная активность
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private AudioManager am;
android.media.AudioManager.OnAudioFocusChangeListener afChangeListener = new android.media.AudioManager.OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) {
// Pause playback
mediaPlayer.pause();
mediaPlayer.seekTo(0);
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// Resume playback
mediaPlayer.start();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
// Stop playback
// releaseMedia();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sound);
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
final ArrayList<sound> sound = new ArrayList<>();
sound.add(new sound(R.drawable.fire,R.raw.campfire));
sound.add(new sound(R.drawable.waves,R.raw.waves));
sound.add(new sound(R.drawable.coffee, R.raw.coffeeshop));
sound.add(new sound(R.drawable.street,R.raw.streetsound));
sound.add(new sound(R.drawable.heavywind,R.raw.wind));
sound.add(new sound(R.drawable.wind,R.raw.gentlewind));
sound.add(new sound(R.drawable.rain,R.raw.verendaroofrain));
sound.add(new sound(R.drawable.umberlla1,R.raw.umberllarain));
sound.add(new sound(R.drawable.river,R.raw.flowing_water));
sound.add(new sound(R.drawable.thunder,R.raw.nature_thunder_crack));
SoundAdapter adapter = new SoundAdapter(MainActivity.this, R.layout.custom_list_view, sound);
GridView gridView = findViewById(R.id.sound);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ImageView imageView = findViewById(R.id.image1);
imageView.setVisibility(View.VISIBLE);
imageView.setOnClickListener(new View.OnClickListener() {
// The code in this method will be executed when the numbers View is clicked on.
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(),"Helefefzefaefafaefeaf",Toast.LENGTH_SHORT).show();
}
});
sound sound1 = sound.get(position);
int result = am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);
// Start playback.
releaseMedia();
mediaPlayer = MediaPlayer.create(MainActivity.this, sound1.getAudio());
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
result = audioManager.requestAudioFocus(afChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mediaPlayer){
releaseMedia();
}
});
}
});
}