2016-12-17 4 views
-1

Я разрабатываю одно приложение, которое может воспроизводить файл .mp3. Итак, в этом приложении я создал один пользовательский адаптер listview для заполнения .mp3-файлов из необработанной папки в listview и создал один класс модели, а в моей исходной папке у меня 20 .mp3 files.Таким образом, я хочу добавить все файлы исходной папки .mp3 в listview в каждой строке. После этого, когда пользователь нажимает этот конкретный элемент списка, в это время воспроизводит эту песню в данной позиции.Как получить все файлы .mp3 из необработанной папки в пользовательский список массивов и воспроизвести эту песню?

Примечание: Я не импортирую файлы .mp3 из SDCARD.

Вот это мой адаптер

public class RingtoneAdapter extends ArrayAdapter<RingtoneModel> { 

private List<RingtoneModel> planetList; 
private Context context; 


public RingtoneAdapter(List<RingtoneModel> planetList, Context ctx) { 
    super(ctx, R.layout.ringtone_row_layout, planetList); 
    this.planetList = planetList; 
    this.context = ctx; 
} 

public int getCount() { 
    return planetList.size(); 
} 

public RingtoneModel getItem(int position) { 
    return planetList.get(position); 
} 

public long getItemId(int position) { 
    return planetList.get(position).hashCode(); 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 

    PlanetHolder holder = new PlanetHolder(); 


    if (convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.ringtone_row_layout, null); 

     TextView tv = (TextView) v.findViewById(R.id.name); 

     holder.planetNameView = tv; 

     v.setTag(holder); 
    } 
    else 
     holder = (PlanetHolder) v.getTag(); 

    RingtoneModel p = planetList.get(position); 
    holder.planetNameView.setText(p.getName()); 


    return v; 
} 


private static class PlanetHolder { 
    public TextView planetNameView; 
} 


} 

Это моя модель класса

public class RingtoneModel { 

private String name; 
private Integer distance; 
private String descr; 
private int idImg; 

public RingtoneModel(String name) { 
    this.name = name; 

} 

public RingtoneModel(String name, String descr) { 
    this.name = name; 
    this.descr = descr; 
} 

public RingtoneModel(String name, Integer distance, String descr, int idImg) { 
    this.name = name; 
    this.descr = descr; 
    this.idImg = idImg; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public Integer getDistance() { 
    return distance; 
} 
public void setDistance(Integer distance) { 
    this.distance = distance; 
} 
public int getIdImg() { 
    return idImg; 
} 
public void setIdImg(int idImg) { 
    this.idImg = idImg; 
} 
} 

И это мой MainActivity

public class MainActivity extends AppCompatActivity { 


List<RingtoneModel> ringtoneList = new ArrayList<RingtoneModel>(); 
RingtoneAdapter ringAdapter; 
ListView ringtoneListMain; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    initRingtoneList(); 

    ringtoneListMain = (ListView)findViewById(R.id.rintoneList); 

    ringAdapter = new RingtoneAdapter(ringtoneList,this); 

    ringtoneListMain.setAdapter(ringAdapter); 

    ringtoneListMain.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     } 
    }); 
} 

private void initRingtoneList() { 

    ringtoneList.add(new RingtoneModel("xyz")); 
    ringtoneList.add(new RingtoneModel("Venus")); 
    ringtoneList.add(new RingtoneModel("Mars")); 
    ringtoneList.add(new RingtoneModel("Jupiter")); 
    ringtoneList.add(new RingtoneModel("Saturn")); 
    ringtoneList.add(new RingtoneModel("Uranus")); 
    ringtoneList.add(new RingtoneModel("Neptune")); 
} 
} 

Итак, если кто-нибудь знает, как я могу сделать все это, тогда, пожалуйста, помогите мне ...

ответ

1

Сначала получите индекс элемента в ListView, когда пользователи нажимают кнопку в ListView.

View parentRow = (View) v.getParent(); 
    ListView listView = (ListView) parentRow.getParent(); 
    final int position = listView.getPositionForView(parentRow); 

После того, как вы получили точный индекс позиции, найти английское слово аудио файл и создать URI для этого звукового файла.

Uri mp3 = Uri.parse("android.resource://" 
      + context.getPackageName() + "/raw/" 
      + datas.get(position).word); 

После того как вы аудиофайл URI, вы можете создать экземпляр класса MediaPlayer и воспроизводить аудиофайл в Android.

mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mediaPlayer.setDataSource(context, mp3); 
    mediaPlayer.prepare(); // might take long! (for buffering, etc) 
    mediaPlayer.start(); 
    mediaPlayer.setOnCompletionListener(onCompletionListener); 

Когда музыка останавливается, немедленно отпустите экземпляр MediaPlayer, чтобы он не потреблял много ресурсов.

private OnCompletionListener onCompletionListener = new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^