代码之家  ›  专栏  ›  技术社区  ›  Select0r

Android:将声音另存为铃声/sqliteConstraintException

  •  3
  • Select0r  · 技术社区  · 15 年前

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

    保存时发生“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

    2 回复  |  直到 14 年前
        1
  •  1
  •   CommonsWare    15 年前

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

        2
  •  1
  •   dell116    14 年前

    我也有同样的问题……因为你的舱单上没有这个许可

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

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

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

    我花了大约半个小时的时间来弄明白代码为什么不起作用。实际上,我删除了try/catch只是为了查看它将在logcat中抛出什么类型的错误,它告诉我缺少这些权限。

    推荐文章