У меня возникли проблемы при попытке использовать медиаплеер в Android Studio, похоже, что я не инициализировал медиаплеер должным образом, что привело к сбою приложения (на телефонах с Android 8.0), когда SoundFXPlayer.setVolume ( ) функция называется. Тем не менее, приложение работало должным образом в эмуляторе (API 26-28) и на большинстве телефонов, которые я тестировал (телефоны с API 26-27), КРОМЕ телефонов, работающих на Android 8.0 (API 28).
Подвести итоги
1. Как правильно инициализировать медиаплеер
2. Почему мой код работает на эмуляторе, а не на телефоне.
Я новичок в stackoverflow и не имел опыта программирования, извините, если не предоставил достаточно подробностей.
Сообщение об ошибке следующим образом:
java.lang.RuntimeException: невозможно запустить действие
ComponentInfo {com.example.garmischwong.buttongame / com.example.garmischwong.buttongame.MenuActivity}:
java.lang.NullPointerException: попытка вызвать виртуальный метод 'void
android.media.MediaPlayer.setVolume (float, float) 'для нулевого объекта
ссылка
package com.example.garmischwong.buttongame;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MenuActivity extends AppCompatActivity {
private Button gameButton;
public int SoundFXVolume;
public MediaPlayer SoundFXPlayer;
public static final String GAME_PREF = "gamePref" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
gameButton = findViewById(R.id.gameButton);
SoundFXPlayer = MediaPlayer.create(this, R.raw.menu_selection_click);
loadSoundFX();
SoundFXPlayer.setVolume((float)SoundFXVolume/100,(float)SoundFXVolume/100);
}
public void goToGameAct(View view)
{
//////Intent to game///////
SoundFXPlayer.start();
Intent goToGameIntent = new Intent(MenuActivity.this, GameActivity.class);
startActivity(goToGameIntent);
finish();
}
public void loadSoundFX()
{
SharedPreferences gamePref = getSharedPreferences(String.valueOf(GAME_PREF), MODE_PRIVATE);
SoundFXVolume = gamePref.getInt("Sound_FX_Volume", 30);
}