3

このコードを使用して、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-methodを呼び出す前にサウンドファイルが存在するかどうかを確認します(ファイルがすでに存在する場合は呼び出さないでください)が、例外がキャッチされない理由を本当に理解したいと思います。誰かが私を助けてくれることを願っています。

よろしくお願いいたします。Select0r

4

2 に答える 2

1

例外がコードにないため、キャッチされません。それはあなたのプロセスにもありません。MediaStoreコンテンツプロバイダーの処理中です。

于 2010-10-12T20:08:52.633 に答える
1

私は同じ問題を抱えていました....それはあなたがあなたのマニフェストにこの許可を持っていないからです

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

また、そのチュートリアルを使用している場合は、マニフェストにもこれがあることを確認してください...

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

コードが機能しなかった理由を理解するために、30分ほどを費やしました。実際にtry/catchを削除して、logcatにどのような種類のエラーがスローされるかを確認したところ、それらの権限が欠落していることがわかりました。

于 2011-11-19T07:13:43.870 に答える