tags:

views:

51

answers:

0

I'm trying to use an Mp3 on the SDCard as a ringtone.

I'm basing my code off various snippets/tutorials online, but none seem to be working.

I'm running FroYo. This is my code:

    Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.TITLE, "Title");
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
    values.put(MediaStore.Audio.Media.DATA, file.getAbsolutePath());
    values.put(MediaStore.Audio.Media.ARTIST, "Artist");
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
    values.put(MediaStore.Audio.Media.IS_ALARM, true);
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);
    Uri newUri = getContentResolver().insert(uri, values);

This is the error I get

08-20 18:48:39.878: ERROR/Database(31570): Error inserting album_id=-1 title=Title is_notification=true title_key=%R%<%R%B%4% mime_type=audio/mp3 date_added=1282326519 _display_name=sb_ringtone_2.mp3 is_alarm=true is_ringtone=true artist_id=31 is_music=false _data=/mnt/sdcard/sb_ringtone_2.mp3
08-20 18:48:39.878: ERROR/Database(31570): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
08-20 18:48:39.878: ERROR/Database(31570):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
08-20 18:48:39.878: ERROR/Database(31570):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55)
08-20 18:48:39.878: ERROR/Database(31570):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549)
08-20 18:48:39.878: ERROR/Database(31570):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
08-20 18:48:39.878: ERROR/Database(31570):     at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:1813)
08-20 18:48:39.878: ERROR/Database(31570):     at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1638)
08-20 18:48:39.878: ERROR/Database(31570):     at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
08-20 18:48:39.878: ERROR/Database(31570):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146)
08-20 18:48:39.878: ERROR/Database(31570):     at android.os.Binder.execTransact(Binder.java:288)
08-20 18:48:39.878: ERROR/Database(31570):     at dalvik.system.NativeStart.run(Native Method)

When I use newUri with the RingtoneManager, no exception is raised, but I get this error when the ringtone is 'played' (ie, somebody rings)

08-20 18:49:28.318: ERROR/MediaPlayerService(26167): Couldn't open fd for content://settings/system/notification_sound
08-20 18:49:28.318: ERROR/MediaPlayer(26174): Unable to to create media player
08-20 18:49:28.318: WARN/NotificationService(26174): error loading sound for content://settings/system/notification_sound
08-20 18:49:28.318: WARN/NotificationService(26174): java.io.IOException: setDataSource failed.: status=0x80000000
08-20 18:49:28.318: WARN/NotificationService(26174):     at android.media.MediaPlayer.setDataSource(Native Method)
08-20 18:49:28.318: WARN/NotificationService(26174):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:716)
08-20 18:49:28.318: WARN/NotificationService(26174):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:671)
08-20 18:49:28.318: WARN/NotificationService(26174):     at com.android.server.NotificationPlayer$CreationAndCompletionThread.run(NotificationPlayer.java:88)

Any help would be greatly appreciated :)