我需要一种方法来显示给定艺术家的所有专辑.到目前为止我发现的所有内容都不是列出所有包含艺术家至少一个声音的专辑的方式 - 但那不是,我想要的.我是android新手,非常感谢帮助.提前致谢!
我已经制作了一个艺术家列表,一旦点击就会显示一个专辑列表.这个想法是,一旦点击一个专辑,就会出现歌曲列表.
不幸的是,因为在这个活动中有两个listviews,第二个'onItemClick'方法在eclipse中被标记为'duplicate'.有谁知道如何解决这个问题?
这是主要的活动代码:
package music.library;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MusicLibrary extends Activity implements OnItemClickListener {
Cursor cursor;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] columns = {
MediaStore.Audio.Artists._ID,
MediaStore.Audio.Artists.ARTIST };
cursor = managedQuery(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
columns, null, null, null);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { MediaStore.Audio.Artists.ARTIST };
int[] displayViews = new int[] { R.id.artistItem };
SimpleCursorAdapter adapter …Run Code Online (Sandbox Code Playgroud) 我正在开发一个音乐播放器应用程序并通过以下代码查询相册名称:
Cursor mediacur = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
mediacur.moveToFirst();
do{
albumindex = mediacur.getColumnIndex(MediaStore.Audio.Media.ALBUM);
albumname = mediacur.getString(albumindex);
songs.add(albumname);
}while(mediacur.moveToNext());
Run Code Online (Sandbox Code Playgroud)
我正在获取所有专辑名称以及铃声和通知.如何从列表中排除铃声和通知?
是否可以通过歌曲而不是专辑获得封面图片.因为我有一张带歌曲的自组合专辑,而且他们都有不同的封面图片.但是当我想查询它们时,我总是得到相同的图片.
String[] ARG_STRING = {MediaStore.Audio.Media.ALBUM_ID};
...
String albumCover = _cursor.getString(_cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
...
MusicUtils.getArtwork(this, -1, Integer.parseInt(albumID));
Run Code Online (Sandbox Code Playgroud)
所以我想知道如何获得一首歌的封面图片.
我知道MusicUtils支持SongId的getArtwork,但我应该使用什么ID,因为MediaStore.Audio.Media._ID不起作用.
我在MediaStore中获得了图片ID.如何在ID中查看图库中的图像?我目前使用以下代码:
ContentResolver cr = context.getContentResolver();
String columns[] = new String[]{
Media._ID, Media.DATA
};
Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, Media._ID+"=?", new String[]{id+""}, null);
if(cursor.moveToNext()) {
String imagePath = cursor.getString(cursor.getColumnIndex(Media.DATA));
Uri imageUri = Uri.fromFile(new File(imagePath));
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.addCategory(android.content.Intent.CATEGORY_DEFAULT);
intent.setDataAndType(imageUri, "image/*");
((Activity)context).startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
它有效,但它太麻烦了.我认为应该有一种更简单的方法来做到这一点.关键是从图像ID获取图像Uri.
我无法从MediaStore获取albumID,我得到-1 getColumnIndex.这是我的代码:
Cursor cursor = mContext.getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
null, null, null, null);
if (cursor.moveToFirst() == false)
{
//no rows empty cursor
}
int albumColumnIndex = cursor.getColumnIndex(Audio.Albums.ALBUM);
int albumidColumnIndex = cursor.getColumnIndex(Audio.Albums.ALBUM_ID);
String album = cursor.getString(albumColumnIndex);
int id = cursor.getInt(albumidColumnIndex);
while(cursor.moveToNext())
{
album = cursor.getString(albumColumnIndex);
id = cursor.getInt(albumidColumnIndex);
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因getColumnIndex(Audio.Albums.ALBUM_ID);返回-1,有谁知道为什么会这样?专辑名称工作正常.
我正试图从uri那里得到路径.它适用于kitkat以下的设备.我用Google搜索,发现我需要获取文档ID,然后使用库项目查询它.它有效.但我面临视频问题.当我从视频部分选择视频时,它可以正常工作.但是当我从Gallery中选择它时,我的应用程序崩溃了,给出了Illegal Argument异常 - 不是文档类型.我知道为什么会这样.这是因为我在Gallery部分中寻找文档类型的视频.但是如何防止这种情况.这样我就可以从图库和视频部分中选择视频.
这是我的代码:
public static String getRealPathFromURI(Context context, Uri contentUri,String type) {
if(isKitkatBelow()) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String docId= DocumentsContract.getDocumentId(contentUri);
String id= docId.split(":")[1];
if(type== TYPE_IMAGE){
String[] proj = { MediaStore.Images.Media.DATA };
String whereClause=MediaStore.Images.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String[] proj = { MediaStore.Video.Media.DATA };
String whereClause=MediaStore.Video.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null); …Run Code Online (Sandbox Code Playgroud) 我想从设备上的一个特定路径获取所有歌曲.在一个例子中,我想从路径中获取一个特定文件夹"music"中的所有歌曲:"/ mnt/sdcard/music /",我需要在我的代码中更改才能实现此目的?我有这种方法从设备获取所有歌曲:
public ArrayList<Song> scanAllSongsOnDevice(Context c)
{
ContentResolver musicResolver = c.getContentResolver();
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String col[] ={android.provider.MediaStore.Audio.Media._ID};
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
if (musicCursor != null && musicCursor.moveToFirst())
{
// clear list to prevent duplicates
songsList = new ArrayList<>();
//get columns
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
int isMusicColumn = musicCursor.getColumnIndex
(MediaStore.Audio.Media.IS_MUSIC);
int duration = musicCursor.getColumnIndex
(MediaStore.Audio.Media.DURATION);
//add songs to list
do
{
String filePath = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MediaStore.ACTION_IMAGE_CAPTURE意图拍摄个人资料照片.
启动意图的代码:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File myPicture = new File(OfflineApp.getAppContext().getFilesDir() + "/" + getResources().getString(R.string.contact_photos_dir), getResources().getString(R.string.my_photo_file_name));
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(myPicture));
startActivityForResult(cameraIntent, REQUEST_CODE_TAKE_PHOTO);
Run Code Online (Sandbox Code Playgroud)
和onActivityResult部分:
case REQUEST_CODE_TAKE_PHOTO:
if (resultCode == RESULT_OK) {
String path = new File(OfflineApp.getAppContext().getFilesDir() + "/" + getResources().getString(R.string.contact_photos_dir), getResources().getString(R.string.my_photo_file_name)).getAbsolutePath();
ContactManager.getInstance().updateMyImage(path);
}
break;
Run Code Online (Sandbox Code Playgroud)
但是,结果代码总是RESULT_CANCELED在我提供的情况下MediaStore.EXTRA_OUTPUT,即使文件不存在也是如此.
我想将图像文件保存在图库中,以便可以从图库应用程序中查看图像。
但是我想要创建一个单独的目录,就像我们在图库应用程序中为whatsapp Images等应用程序创建目录一样。
到目前为止,我已经编写了此代码来下载图像
public void createDir(){
File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), DIR_NAME);
Log.d(LOG_TAG, "dir pictr :" + dir.toString());
if (!dir.exists()) {
dir.mkdir();
Log.d(LOG_TAG, "dir not exists and created first time");
} else {
Log.d(LOG_TAG, "dir exists");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在gallery dir中创建了目录
Uri imageLink = Uri.parse(downloadUrlOfImage); // this is download link like www.com/abc.jpg
CreateDir();
DownloadManager.Request request = new DownloadManager.Request(imageLink);
File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), DIR_NAME);
String absPath = dir.getAbsoultePath();
request.setDestinationUri(Uri.parse(absPath + "image.jpg"));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
DownloadManager dm = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);
Run Code Online (Sandbox Code Playgroud)
但这给我错误 java.lang.IllegalArgumentException: …
android ×10
mediastore ×10
cursor ×1
database ×1
java ×1
listview ×1
media-player ×1
onitemclick ×1
uri ×1
video ×1