Во время onCreate() call, у меня есть прослушиватель изменения текста, прикрепленный к элементу управления EditText с именем сахар, поэтому при изменении текста внутри этого элемента управления он вызывает функцию onTextChanged().
Внутри onTextChanged(), у меня есть 4 различных сценария (где уровень сахара в крови человека может быть низким и падающим, низким и повышающимся, высоким и падающим или высоким и повышающимся). В зависимости от того, какое число (от 1 до 4) находится внутри поля сахара, моя цель — передать строку функции M4APlayer.play() в M4APlayer.java, определяющей, какой звук воспроизводить (в зависимости от того, какой в поле сахара вводится число от 1 до 4).
Все работало нормально, пока я не добавил функцию MediaPlayer.create(). Теперь мое приложение вылетает с ошибкой
Невозможно обеспечить желаемое поведение при переключении
Что это может означать? Вот мой код MainActivity.java:
Код: Выделить всё
package com.UnitedToolsForSouls.SoundAlert;
import android.app.*;
import android.os.*;
import java.util.*;
import android.widget.*;
import android.text.*;
import android.content.*;
public class MainActivity extends Activity {
private static EditText sugar;
private static TextView result;
private static TextView scenario1;
private static TextView scenario2;
private static TextView scenario3;
private static TextView scenario4;
public Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
sugar = (EditText) findViewById(R.id.sugar);
result = (TextView) findViewById(R.id.result);
scenario1 = (EditText) findViewById(R.id.scenario1);
scenario2 = (EditText) findViewById(R.id.scenario2);
scenario3 = (EditText) findViewById(R.id.scenario3);
scenario4 = (EditText) findViewById(R.id.scenario4);
sugar.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Called as text is being changed
String sug = sugar.getText().toString();
String s1 = scenario1.getText().toString();
String s2 = scenario2.getText().toString();
String s3 = scenario3.getText().toString();
String s4 = scenario4.getText().toString();
result.setText("???");
if (sug.length() == 1) {
if (sug.charAt(0) == '1') {
result.setText(s1);
}
if (sug.charAt(0) == '2') {
result.setText(s2);
}
if (sug.charAt(0) == '3') {
result.setText(s3);
}
if (sug.charAt(0) == '4') {
result.setText(s4);
}
M4APlayer.play(context, result.getText().toString());
}
}
@Override
public void beforeTextChanged(CharSequence p1, int p2, int p3, int p4) {
// TODO: Implement this method
}
@Override
public void afterTextChanged(Editable p1) {
// TODO: Implement this method
}
});
}
}
Код: Выделить всё
package com.UnitedToolsForSouls.SoundAlert;
import android.content.Context;
import android.media.MediaPlayer;
public class M4APlayer {
public static void play(Context context, String file) {
/*PROBLEM*/
MediaPlayer mp = MediaPlayer.create(context, R.id.scenario1);
//mp.start();
//Stop the fplayer.
//Loop and play the file when nothing is playing.
}
}
Кроме того, почему MediaPlayer.create() принимает в качестве второго аргумента целочисленный аргумент?
p>
Я пытался закомментировать код в M4APlayer.play(), пока мое приложение не перестало давать сбой, и обнаружил, что это сделал MediaPlayer.create(). Конкретного ответа на этот сценарий пока нет. В одном ответе предлагалось очистить кеш и перезагрузить телефон, но комментарий, что одна строка помогла.
Подробнее здесь: https://stackoverflow.com/questions/793 ... the-androi
Мобильная версия