我正在为Android制作一款可以正常运行的应用,但仅适用于Android 6+设备。原因是我在其中使用了一个需要 API 23 的方法,因此当我在我的Android JB手机(Jelly Bean是API 17)上测试它时,它会在到达那段代码时崩溃。 该方法是' getBufferSizeInFrames()', AudioTrack 类的一部分。我正在努力以其他方式做到这一点而我的问题是,没有这个功能有没有办法做到这一点?例如,创建另一个执行相同操作但不需要API 23的函数。
以下是我在MainActivity.java中的代码的一部分,其中有两种方法可供使用。如果你想要完整的代码,这是我在GitHub上的项目存储库:https://github.com/allexks/RandomMelodyAndroid
提前致谢!
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// UNRELATED CODE ...
switchPlay.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked && track != null) {
track.setLoopPoints(0, track.getBufferSizeInFrames(), -1);
track.play();
}
else {
if(track != null) track.stop();
}
}
}
);
}
private AudioTrack track;
void setTrack(AudioTrack adt) {
boolean wasPlaying = false;
if(track != null) {
wasPlaying = track.getPlayState() == AudioTrack.PLAYSTATE_PLAYING;
track.stop();
}
track = adt;
if(wasPlaying) {
track.setLoopPoints(0, track.getBufferSizeInFrames(), -1);
track.play();
}
}
}