我已经在网上搜索了一下,stackoverflow找不到任何东西,除了我正在使用的代码。
我的问题是它适用于索尼xperia U(2.3.3和4.0.3)和xperia neo v(2.3.3和4.0.3),并且不适用于galaxy gio(2.2), s3和s4(4.0 +)
private void setRingTone()
{
try
{
String path = Environment.getExternalStorageDirectory()+ "/testring/a.mp3";
File file = new File(path);
Log.v(file.getAbsolutePath(), path);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "0000");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
values.put(MediaStore.Audio.Media.ARTIST, "BY ME");
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, true);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());
Uri newUri = getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);
Toast.makeText(this, "success", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(this, "failed", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
mp3的路径是有效的,因为我可以在同一个应用程序中播放它,这段代码永远不会抛出execption并完成成功消息。
我有这些权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
我错过了什么?
答案 0 :(得分:0)
在我再次添加之前,我刚刚从ContentResolver中删除了mp3 uri,而且效果非常好。
Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());
getContentResolver().delete(uri ,null ,null);
Uri newUri = getContentResolver().insert(uri, values);