2016-10-07 6 views
2

Я пытаюсь воспроизводить звуки динамически. У меня есть ресурс, который я создал под папкой res, которая называется «raw». в нем нет mp3-файлов. Я хочу сделать массив со всеми именами файлов, а при нажатии на кнопку следующего mp3 int следующий индекс будет загружен в медиаплеер и будет воспроизводиться.android - изменение файла, воспроизводимого в медиаплеере, динамически

Я нашел этот код для использования медиаплеера

public class MainActivity extends ActionBarActivity { 
Context context = this; 
MediaPlayer mp; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 
    mp = MediaPlayer.create(context, R.raw.sound); 
    final Button b = (Button) findViewById(R.id.Button); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mp.isPlaying()) { 
        mp.stop(); 
        mp.release(); 
        mp = MediaPlayer.create(context, R.raw.sound); 
       } mp.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 
} 
} 

, но я не могу найти способ установить переключение трека на массив с помощью названия песни по индексу я.

Спасибо за любую помощь

ответ

1

1.Basing на этот источник:

dynamically getting all image resource id in an array

вы можете попробовать написать такой код:

Field[] fields= R.raw.class.getFields(); 
int[] resArray = new int[fields.length]; 
for(int i = 0; i < fields.length; i++) { 
    try { 
     resArray[i] = fields[i].getInt(null); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

и resArray[] будет содержать все идентификаторы, которые у вас есть в папке raw.

2.Если вы хотите использовать имена файлов, вы можете использовать метод int getIdentifier (String name, String defType, String defPackage) от Resources.

3.Если вы хотите использовать файлы из внешнего хранилища вы можете легко создать Media Player экземпляр, используя путь к файлу (помните о разрешениях)

1

Я нашел решение. Я установил все имена файлов в необработанном графике с одинаковым шаблоном имени, получил каждый идентификатор ресурса файла по его имени и загрузил его в плеер.

Resources res = getResources(); //resource handle 
    String url = "song" +index; 
    InputStream is = getClass().getClassLoader().getResourceAsStream("raw/"); 
    Integer resIdSound = res.getIdentifier (url, "raw", this.getPackageName()); 
    mp = MediaPlayer.create(this, resIdSound); 
    try { 
     if (mp.isPlaying()) { 
      mp.stop(); 
      mp.release(); 
      mp = MediaPlayer.create(this, resIdSound); 
     } mp.start(); 
    } catch(Exception e) { e.printStackTrace(); } 
}