Android: сохранить звук как мелодию звонка / SQLiteConstraintException

Я пытаюсь сохранить звук в качестве мелодии звонка в Android с помощьюэтот код. Это работает как брелок, но не удастся, если я попытаюсь сохранить рингтон, который уже был вставлен.

«SQLiteConstraintException» возникает при сохранении, но я не могу поймать исключение, фактически я не могу пойматьлюбой execption.

Вот часть моего кода:

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());

try {
  this.getContentResolver().insert(uri, values);
} catch (SQLiteConstraintException e) {
  Log.e("error", e.getMessage());
} catch (SQLiteException e) {
  Log.e("error", e.getMessage());
} catch (Exception e) {
  Log.e("error", e.getMessage());
}

Поэтому я пытаюсь поймать любое возможное исключение, ноникто пойман

Это LogCat:

10-12 18:32:51.627: ERROR/Database(217): Error inserting album_id=-1 title=Applause is_notification=true title_key=%,%J%J%B%,%T%P%4% mime_type=audio/ogg date_added=1286908371 _display_name=Applause.ogg is_alarm=true is_ringtone=true artist_id=1 is_music=false _data=/mnt/sdcard/media/audio/ringtones/Applause.ogg
10-12 18:32:51.627: ERROR/Database(217): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
10-12 18:32:51.627: ERROR/Database(217):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
10-12 18:32:51.627: ERROR/Database(217):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55)
10-12 18:32:51.627: ERROR/Database(217):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549)
10-12 18:32:51.627: ERROR/Database(217):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
10-12 18:32:51.627: ERROR/Database(217):     at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:1813)
10-12 18:32:51.627: ERROR/Database(217):     at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1638)
10-12 18:32:51.627: ERROR/Database(217):     at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
10-12 18:32:51.627: ERROR/Database(217):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146)
10-12 18:32:51.627: ERROR/Database(217):     at android.os.Binder.execTransact(Binder.java:288)
10-12 18:32:51.627: ERROR/Database(217):     at dalvik.system.NativeStart.run(Native Method)

Я нашел обходной путь: я проверяю, существует ли звуковой файл, прежде чем вызывать .insert-метод (и не вызываю его, если файл уже существует), но мне бы очень хотелось понять, почему не генерируется исключение. Надеюсь, кто-нибудь может мне помочь.

С уважением, Select0r

 Bruno Bieri16 сент. 2012 г., 12:26
мне помогла ссылка на "использование этого кода" ... спасибо

Ответы на вопрос(2)

Решение Вопроса

потому что исключение отсутствует в вашем коде. Это даже не в вашем процессе. Это в процессеMediaStore поставщик услуг.

 Select0r13 окт. 2010 г., 10:27
Хорошо спасибо. Я пойду с моим обходным путем тогда.
 CommonsWare12 окт. 2010 г., 22:40
@ Select0r: Нет, так как его нет в вашем коде.
 Select0r12 окт. 2010 г., 22:36
Хорошо, это объясняет, почему LogCat не показывает мне файл и номер строки одного измой файлы :) Значит ли это, что у меня нет шансов получить это исключение?

что у вас нет этого разрешения в манифесте

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

Кроме того, если вы используете это руководство, убедитесь, что оно есть в вашем манифесте ...

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Я потратил примерно полчаса, пытаясь понять, почему код не работает. Я на самом деле удалил try / catch, чтобы посмотреть, какую ошибку он выдаст в logcat, и он сказал мне, что мне не хватает этих разрешений.

 Select0r24 нояб. 2011 г., 15:24
Нет, прочитайте мой пост еще раз, моя проблема не была связана с разрешением.

Ваш ответ на вопрос