大家好我正在制作一个Android应用程序,我必须显示SD卡的所有视频内容(专辑明智).....这意味着当我们将加载应用程序时,只显示相册的名称....当我们点击特定的专辑时,应该显示ITS视频文件...................我能够显示专辑名称但问题是如果有相同的专辑名称(即IF TWO VIDEO文件属于同一专辑)则会显示两张不同的专辑...........所以我希望所有同一专辑的视频都在一个&# 34;专辑名称" ............点击该专辑名称"应显示其所有视频内容" 任何帮助将在下面是主要类(AlbumVideo.class)
public class AlbumVideo extends Activity {
private Cursor audiocursor;
private int audio_column_index;
ListView audiolist;
int count;
int album=1;
int dura;
int i1 =R.drawable.ic_launcher;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imagexml1);
init_phone_videos_grid();
}
@SuppressWarnings("deprecation")
private void init_phone_videos_grid() {
System.gc();
final String[] projection = new String[] {
MediaStore.Video.VideoColumns.ALBUM };
final String sortOrder = VideoColumns.ALBUM + " COLLATE LOCALIZED ASC";
audiocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
projection, null, null, sortOrder);
count = audiocursor.getCount();
audiolist = (ListView) findViewById(R.id.PhoneVideo);
audiolist.setAdapter(new AudioAdapter(getApplicationContext()));
audiolist.setOnItemClickListener(videogridlistener);
}
private OnItemClickListener videogridlistener = new OnItemClickListener() {
@SuppressWarnings("rawtypes")
public void onItemClick(AdapterView parent, View v, int position,
long id) {
System.gc();
audio_column_index = audiocursor
.getColumnIndexOrThrow(MediaStore.Video.VideoColumns.ALBUM);
audiocursor.moveToPosition(position);
String filename = audiocursor.getString(audio_column_index);
Intent intent = new Intent(AlbumVideo.this,
AlbumVideoDetail.class);
intent.putExtra("albumfilename",filename);
intent.putExtra("album",album);
startActivity(intent);
}
};
public class AudioAdapter extends BaseAdapter
{
private Context vContext;
CheckBox cb;
int position=0;
int check=0;
String a[]=new String[count];
public AudioAdapter(Context c) {
vContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
System.gc();
LayoutInflater inflater = getLayoutInflater();
View row;
row = inflater.inflate(R.layout.list_item1, parent, false);
final Button title = (Button) row.findViewById(R.id.button);
title.setTextColor(Color.parseColor("#000000"));
if (convertView == null) {
audio_column_index =audiocursor.getColumnIndexOrThrow(MediaStore.Video.VideoColumns.ALBUM );
audiocursor.moveToPosition(position);
String TITLE = audiocursor.getString(audio_column_index);
String a[]=new String[count];
Toast.makeText(AlbumVideo.this, "music will be available shortly"+TITLE, Toast.LENGTH_LONG).show();
title.setText(TITLE);
}
return (row);
}
}
}
和第二个显示特定专辑歌曲的课程是(" AlbumVideoDetail.class")
public class AlbumVideoDetail extends Activity {
private Cursor videocursor;
private int video_column_index;
ListView videolist;
int count;
String title=null;
String desc=null;
int dura;
int i1 =R.drawable.ic_launcher;
String filename;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imagexml);
Intent i = getIntent();
Bundle extras = i.getExtras();
filename = extras.getString("albumfilename");
// String filename1 = filename.substring(filename.indexOf("sdcard"),filename.length());
// String filename2= filename1.substring(7);
Toast.makeText(AlbumVideoDetail.this, "music will be available shortly"+filename, Toast.LENGTH_LONG).show();
init_phone_videos_grid();
}
@SuppressWarnings("deprecation")
private void init_phone_videos_grid() {
System.gc();
String[] proj = { MediaStore.Video.Media.DATA,
MediaStore.Video.Media._ID, MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.MIME_TYPE,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.SIZE,};
String where = android.provider.MediaStore.Video.Media.ALBUM + "=?";
String whereVal[] = { filename };
String orderBy = android.provider.MediaStore.Video.Media.TITLE;
videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
proj, where, whereVal, orderBy);
count = videocursor.getCount();
videolist = (ListView) findViewById(R.id.PhoneVideoList);
videolist.setAdapter(new VideoAdapter(getApplicationContext()));
}
public class VideoAdapter extends BaseAdapter {
private Context vContext;
CheckBox cb;
int position=0;
int check=0;
public VideoAdapter(Context c) {
vContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
System.gc();
LayoutInflater inflater = getLayoutInflater();
View row;
row = inflater.inflate(R.layout.list_item2, parent, false);
final TextView title = (TextView) row.findViewById(R.id.title);
TextView desc = (TextView) row.findViewById(R.id.desc);
TextView dura = (TextView) row.findViewById(R.id.duration);
title.setTextColor(Color.parseColor("#000000"));
desc.setTextColor(Color.parseColor("#000000"));
dura.setTextColor(Color.parseColor("#000000"));
if (convertView == null) {
video_column_index =videocursor
.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
videocursor.moveToPosition(position);
final String TITLE = videocursor.getString(video_column_index);
title.setText(TITLE);
video_column_index = videocursor
.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
videocursor.moveToPosition(position);
String DESC= videocursor.getString(video_column_index);
int desd=Integer.parseInt(DESC);
int kb = (int) ((desd / 1000) % 1000);
int mb = (int) ((desd / 1000) / 1000);
String KB=Integer.toString(kb);
String MB=Integer.toString(mb);
String DESC1 = MB + "." + KB +"mb";
desc.setText(DESC1);
video_column_index = videocursor
.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
videocursor.moveToPosition(position);
String DURA= videocursor.getString(video_column_index);
int duro = Integer.parseInt(DURA);
int seconds = (int) ((duro / 1000) % 60);
int minutes = (int) ((duro / 1000) / 60);
String secs=Integer.toString(seconds);
String mins=Integer.toString(minutes);
String DURA1 = mins + ":" + secs;
dura.setText(DURA1);
video_column_index = videocursor
.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
videocursor.moveToPosition(position);
final String filename = videocursor.getString(video_column_index);
} return (row);
}
}
}
答案 0 :(得分:1)
private void init_phone_videos_grid() {
System.gc();
String[] proj = { MediaStore.Video.Media.DATA,
MediaStore.Video.Media._ID, MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.MIME_TYPE,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.SIZE,};
String where = android.provider.MediaStore.Video.Media.ALBUM + "=?";
String whereVal[] = { filename };
String orderBy = android.provider.MediaStore.Video.Media.TITLE;
videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "DISTINCT "
+proj, where, whereVal, orderBy);
count = videocursor.getCount();
videolist = (ListView) findViewById(R.id.PhoneVideoList);
videolist.setAdapter(new VideoAdapter(getApplicationContext()));
}
只需在“专辑详细信息”类中添加“distinct”一词...... n它会根据您的要求对查询进行排序....
答案 1 :(得分:0)
更改以下内容:
final String[] projection = new String[] {MediaStore.Video.VideoColumns.ALBUM };
进入
final String[] projection = new String[]{ "DISTINCT " +MediaStore.Video.VideoColumns.ALBUM};