【问题标题】:Android: save sound as ringtone / SQLiteConstraintExceptionAndroid:将声音另存为铃声/SQLiteConstraintException
【发布时间】:2010-10-12 18:55:14
【问题描述】:

我正在尝试使用 this 代码将声音保存为 Android 中的铃声。它就像一个魅力,但如果我尝试保存已经插入的铃声,它会失败。

保存时出现“SQLiteConstraintException”但我无法捕捉到异常,事实上,我无法捕捉到任何执行。

这是我的代码的一部分:

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 方法之前检查声音文件是否存在(如果文件已经存在,则不要调用它),但我真的很想了解为什么没有捕获到异常.希望有人能帮帮我。

亲切的问候, 选择0r

【问题讨论】:

  • “使用此代码”的链接帮助了我...谢谢

标签: android exception sqlite ringtone


【解决方案1】:

它没有被捕获,因为异常不在您的代码中。它甚至不在你的过程中。它正在MediaStore 内容提供者的进程中。

【讨论】:

  • 好的,这就解释了为什么 LogCat 没有向我显示 my 文件之一的文件和行号 :) 这是否意味着我没有机会获得持有那个例外吗?
【解决方案2】:

我遇到了同样的问题....这是因为您的清单中没有此权限

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

此外,如果您正在使用该教程,请确保您的清单中也包含此内容...

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

我花了半个小时左右的时间试图找出代码不起作用的原因。我实际上删除了 try/catch 只是为了看看它会在 logcat 中抛出什么类型的错误,它告诉我我缺少这些权限。

【讨论】:

  • 不,再看一遍我的帖子,我的问题与权限无关。
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多