2016-09-05 42 views
0

我知道这是一个非常普遍的问题。但是,尽管我的逻辑是正确的,但我仍然无法在我的应用程序中播放声音,但使用了MediaPlayer类。目前,我在我的应用程序中具有抖动检测功能。每当设备被震动时,它都会发出声音。下面是我的代码:Android MediaPlayer ::问题

public class MainActivity extends AppCompatActivity { 

private SensorManager mSensorManager; 
private Sensor mAccelerometer; 
private ShakeDetector mShakeDetector; 
private SoundManager mSoundManager; 
private TextView xText; 
private Context context; 
private AudioPool ap; 
int id1,id2; 
File directory; 

MediaPlayer player, mPlayer; 
AudioCollective ac; 
Lagu la; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    xText = (TextView)findViewById(R.id.xText); 

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mShakeDetector = new ShakeDetector(); 

    la = new Lagu(); 
    la.initLagu(MainActivity.this); 

    mShakeDetector.setOnShakeListener(new ShakeDetector.OnShakeListener() { 

     @Override 
     public void onShake(int count) { 

      la.playLagu(); 
      xText.setText("Shake:"+count); 

     } 
    }); 
} 

public class Lagu { 
MediaPlayer mPlayer; 
public Lagu(){ 
    mPlayer = new MediaPlayer(); 
} 
public void initLagu(Context theContext){ 
    mPlayer.create(theContext, R.raw.na); 
} 
public void playLagu(){ 
    mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
} 

}

的问题是应用每个手机摇晃时间不播放声音。应用程序甚至不会播放声音。 FYI,歌曲的格式是MP3。有人请告诉我我的应用程序出了什么问题?您的帮助将不胜感激!

+0

检查日志中的警告或错误时,有时这些类可以在设备间表现不同。 – Pievis

+0

嗨,日志中没有显示错误或警告。这意味着逻辑是正确的。但我仍然不知道它为什么不播放声音。 – JackPowell

回答

1

documentationMediaplayer.create()

方便的方法来创建一个给定的资源ID的MediaPlayer。在成功时,prepare()已经被调用,不能再被调用。

注:该方法Mediaplayer.create()是返回一个静态方法准备使用的Mediaplayer

所以,你需要的返回值分配给您的MPLAYER 你不需要任何OnPreparedListener - 只需拨打start()

public class Lagu { 

MediaPlayer mPlayer; 

public Lagu(){ 
    // do nothing or call initLagu() here 
    // in this case skip the method call from the Activity's onCreate() 
} 

public void initLagu(Context theContext){ 
    mPlayer = Mediaplayer.create(theContext, R.raw.na); 
} 

public void playLagu(){ 

    mPlayer.start(); 
} 

}

+0

嗨,谢谢你的回复。我对你的答案有些怀疑。我想在initLagu()实现OnPreparedListener?并在playLagu()创建()? – JackPowell

+0

@杰克鲍威尔 - 谢谢你的提问。请看看我编辑的答案 - 我忽略了Mediaplayer.create()是一个静态方法。我的不好:( – 0X0nosugar

+0

解决了这个问题,谢谢! – JackPowell