Hello,
I`d like to implememt media list for SoundRecorder which is open_src
app.
But I`ve found some Runtime error.
I`ve insert media file into the MediaStore.Audio.Media using
'addToMediaDB(File file)'
===============================================================
private Uri addToMediaDB(File file) {
Resources res = getResources();
ContentValues cv = new ContentValues();
long current = System.currentTimeMillis();
long modDate = file.lastModified();
Date date = new Date(current);
SimpleDateFormat formatter = new SimpleDateFormat(
res.getString(R.string.audio_db_title_format));
String title = formatter.format(date);
// Lets label the recorded audio file as NON-MUSIC so that the
file
// won't be displayed automatically, except for in the
playlist.
cv.put(MediaStore.Audio.Media.IS_MUSIC, "0");
cv.put(MediaStore.Audio.Media.TITLE, title);
Log.d(MediaStore.Audio.Media.TRACK.toString
(),MediaStore.Audio.Media.TRACK.toString());
cv.put(MediaStore.Audio.Media.DATA, file.getAbsolutePath());
cv.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current /
1000));
cv.put(MediaStore.Audio.Media.DATE_MODIFIED, (int) (modDate /
1000));
// cv.put(MediaStore.Audio.MediaColumns.DURATION,
mRecordingLength);
cv.put(MediaStore.Audio.Media.MIME_TYPE, MIME_TYPE);
cv.put(MediaStore.Audio.Media.ARTIST,
res.getString(R.string.audio_db_artist_name));
cv.put(MediaStore.Audio.Media.ALBUM,
res.getString(R.string.audio_db_album_name));
Log.d(TAG, "Inserting audio record: " + cv.toString());
ContentResolver resolver = getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Log.d(TAG, "ContentURI: " + base);
Uri result = resolver.insert(base, cv);
Log.e(TAG, result.toString());
if (result == null) {
new AlertDialog.Builder(this)
.setTitle(R.string.app_name)
.setMessage(R.string.error_mediadb_new_record)
.setPositiveButton(R.string.button_ok, null)
.setCancelable(false)
.show();
return null;
}
if (getPlaylistId(res) == -1) {
createPlaylist(res, resolver);
}
int audioId = Integer.valueOf(result.getLastPathSegment());
addToPlaylist(resolver, audioId, getPlaylistId(res));
// Notify those applications such as Music listening to the
// scanner events that a recorded audio file just created.
sendBroadcast(new Intent
(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));
return result;
}
==========================================================================
and I`ve put all of my files from sdcard.
==========================================================================
private void makePlaylist()
{
String[] cols = new String[] {
MediaStore.Audio.Playlists._ID,
MediaStore.Audio.Playlists.NAME
};
String status = Environment.getExternalStorageState();
Uri uri;
if (status.equals(Environment.MEDIA_MOUNTED))
list_path = new File("/sdcard");
else
list_path = new File("/data/sec_media");
File f_list[] = list_path.listFiles();
f_len = f_list.length;
for(int i=0;i < f_len ; i++){
uri = addToMediaDB(f_list[i]);
}
}
==========================================================================
According to logs, media files was in MediaStore.Audio.Media
==========================================================================
02-25 02:13:20.385: DEBUG/SoundRecorder(1057): Inserting audio record:
is_music=0 mime_type=audio/amr artist=Your recordings title=2009-02-25
02:13:20 _data=/sdcard/recording13246.amr date_modified=1235030668
album=Audio recordings date_added=1235528000
02-25 02:13:20.385: DEBUG/SoundRecorder(1057): ContentURI:
content://media/external/audio/media
02-25 02:13:20.415: ERROR/SoundRecorder(1057):
content://media/external/audio/media/322
==========================================================================
I thought "322" was _ID.
However when I excute program, error has occured.
I`d like show my audio file through ListView.
==========================================================================
public class MyPlaylist extends ListActivity {
SoundRecorder mSr;
Uri playlist_uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = new String[] {
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.playlist);
Log.e("Playlist","onCreate");
Cursor cursor = managedQuery(playlist_uri, projection, null,
null,
null);
// Used to map notes entries from the database to views
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.play_row, cursor, new String[]
{MediaStore.Audio.Media.TITLE }, new int[] {R.id.text1});
setListAdapter(adapter);
}
}
==========================================================================
and here are error message.
==========================================================================
02-25 02:13:24.065: ERROR/AndroidRuntime(1057): Caused by:
java.lang.IllegalArgumentException: column '_id' does not exist
==========================================================================
I couldn`t find any solutions.
I think there are some problem when I`m using content provider.
But for me, it is very difficult to understand.
Could you please give me a solution?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---