检查内容解析器是否有价值

iom*_*tin 1 android

以下是关于如何在Android活动中设置铃声的答案,我正在使用此代码:

File k = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title");
values.put(MediaStore.MediaColumns.SIZE, 215454);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
values.put(MediaStore.Audio.Media.DURATION, 230);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

//Insert it into the database
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
Uri newUri = main.getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(
  myActivity,
  RingtoneManager.TYPE_RINGTONE,
  newUri
);
Run Code Online (Sandbox Code Playgroud)

但是,每次运行程序时,这都会在我的内容解析器中创建一个新条目.如何检查内容解析器中是否已存在Uri?我在文件中找不到任何东西.

Joe*_*lin 5

内容解析器只是处理您的应用和内容提供商之间的交互的东西.

您应该特别关注内容提供商和MediaStore内容提供商.

你打电话的时候在做什么

Uri newUri = main.getContentResolver().insert(uri, values);
Run Code Online (Sandbox Code Playgroud)

是否在MediaStore中插入新行.newUri指向这一行.您可以通过调用获取行的_ID值

long newID=ContentUris.parseId(newUri);
Run Code Online (Sandbox Code Playgroud)

但是,我认为你所问的是"我怎么知道我是否已经向MediaStore添加了一首歌?" 我建议您在MediaStore上进行查询.请参阅ContentResolver.query().

如果我这样做,我会查询MediaColumns.DATA,看看你以前是否写过该文件.除此之外,你必须决定什么构成了"已经存在"的铃声.