2016-12-17 7 views
-1

私は.mp3ファイルを再生することができる1つのアプリケーションを開発しています。このアプリケーションでは、リストビューにrawフォルダから.mp3ファイルを読み込むためのカスタムリストビューアを作成し、 .mp3ファイル。だから、私はすべての生のフォルダの.mp3ファイルを各行のリストビューに追加したいと思います。その時点でユーザーがその特定のリストビュー項目をクリックすると、その曲が再生されます。すべての.mp3ファイルをrawフォルダからカスタム配列listviewに取得してその曲を再生するにはどうすればいいですか?

注:私はSDCARDからその.mp3ファイルをインポートしていません。ここでは、この私のアダプタ

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で項目インデックスを取得します。

正確な位置インデックスを取得したら、英語の音声ファイルを探し、その音声ファイルの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; 
    } 
}; 
関連する問題